You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中jQuery AJAX获取数据后JSON.parse报语法错误求助

问题:JSON解析时抛出"Uncaught SyntaxError: Unexpected end of JSON input"错误

控制台错误信息:

Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at GetExistingSubList (310:2611:34)
    at HTMLDocument.<anonymous> (310:2392:17)
    at fire (jquery-1.12.4.js:3232:31)
    at Object.fireWith [as resolveWith] (jquery-1.12.4.js:3362:7)
    at Function.ready (jquery-1.12.4.js:3582:13)
    at HTMLDocument.completed (jquery-1.12.4.js:3617:10)

相关代码如下:

控制器代码

[HttpPost]
public ActionResult Getsubscriptiondata()
{
    var subdata = db.ExistingSubscriptionList.Where(substatus => substatus.OSCP_SubStatusId == "1").ToList();

    return Content(JsonConvert.SerializeObject(subdata));
}

AJAX调用代码

function getExistingSubValue() {
    $.ajax({
        type: "POST",
        url: "/UserManagement/Getsubscriptiondata",
        contentType: false,
        data: {},
        cache: false,
        success: function (data) {
            $("#hdnExistingSubs").val(data);
        }
    });
}

数据解析代码

if (ServiceId != '' && CloudId == '1' && IdentityTenantId != '') {
    var flag = 0;
    var data = $('#hdnExistingSubs').val();

    var items = JSON.parse(data);

    var table = $('#tblExistingSubs').DataTable();
    table.rows().remove().draw();

    var result = [];
    for (var item, i = 0; item = items[i++];) {
        result.push(item);
    }
}

解决方法

1. 修正控制器返回类型与响应头

原代码用Content()返回序列化后的JSON,但未指定正确的Content-Type,导致jQuery无法自动识别响应格式,同时可能存在JSON转义问题。修改控制器代码为两种方式之一:

方式一:使用MVC内置的JsonResult

[HttpPost]
public ActionResult Getsubscriptiondata()
{
    var subdata = db.ExistingSubscriptionList.Where(substatus => substatus.OSCP_SubStatusId == "1").ToList();
    return Json(subdata, JsonRequestBehavior.AllowGet);
}

方式二:指定Content-Type为application/json

[HttpPost]
public ActionResult Getsubscriptiondata()
{
    var subdata = db.ExistingSubscriptionList.Where(substatus => substatus.OSCP_SubStatusId == "1").ToList();
    return Content(JsonConvert.SerializeObject(subdata), "application/json");
}

2. 修正AJAX请求配置

原代码中contentType: false是错误的,该配置仅用于上传FormData场景。同时添加dataType: "json"让jQuery自动解析响应为JSON对象,无需手动调用JSON.parse:

function getExistingSubValue() {
    $.ajax({
        type: "POST",
        url: "/UserManagement/Getsubscriptiondata",
        contentType: "application/json",
        data: JSON.stringify({}),
        dataType: "json",
        cache: false,
        success: function (data) {
            processExistingSubs(data);
        }
    });
}

3. 避免通过隐藏域传递JSON

隐藏域存储JSON时,可能因HTML转义(如双引号被转义为&quot;)导致解析失败。直接在AJAX成功回调中处理数据:

function processExistingSubs(items) {
    if (ServiceId != '' && CloudId == '1' && IdentityTenantId != '') {
        var flag = 0;
        var table = $('#tblExistingSubs').DataTable();
        table.rows().remove().draw();
        
        var result = [];
        for (var i = 0; i < items.length; i++) {
            result.push(items[i]);
        }
        // 后续表格渲染等逻辑...
    }
}

内容的提问来源于stack exchange,提问作者Sadiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:57:46