jQuery对ajax请求返回“parsererror”

24 浏览
0 Comments

jQuery对ajax请求返回“parsererror”

我在使用Ajax请求时一直遇到jquery返回的“parsererror”错误,我尝试将POST改成GET,以多种不同的方法返回数据(创建类等),但是我无法弄清楚问题出在哪里。

我的项目是MVC3,使用的是jQuery 1.5。

我有一个下拉框,当onchange事件触发时调用某个方法获取基于所选内容的数据。

下拉框:(这将从视图包中的列表加载“Views”,并且触发事件也很顺利)

@{
    var viewHtmls = new Dictionary<string, object>();
    viewHtmls.Add("data-bind", "value: ViewID");
    viewHtmls.Add("onchange", "javascript:PageModel.LoadViewContentNames()");
}
@Html.DropDownList("view", (List)ViewBag.Views, viewHtmls)

JavaScript:

this.LoadViewContentNames = function () {
    $.ajax({
        url: '/Admin/Ajax/GetViewContentNames',
        type: 'POST',
        dataType: 'json',
        data: { viewID: $("#view").val() },
        success: function (data) {
            alert(data);
        },
        error: function (data) {
            debugger;
            alert("Error");
        }
    });
};

上面的代码成功调用了MVC方法,并返回:

[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
 {"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]

但是jQuery为$.ajax()方法触发错误事件,显示“parsererror”。

admin 更改状态以发布 2023年5月22日
0
0 Comments

请查看 @david-east 的回答以获取正确处理该问题的方法。

本回答仅适用于使用 file: 协议时的 jQuery 1.5 错误。

我最近在升级到 jQuery 1.5 时遇到了类似的问题。尽管获得了正确的响应,但错误处理程序仍然触发了。我通过使用 complete 事件,然后检查状态值来解决了这个问题。例如:

complete: function (xhr, status) {
    if (status === 'error' || !xhr.responseText) {
        handleError();
    }
    else {
        var data = xhr.responseText;
        //...
    }
}

0
0 Comments

我最近遇到了这个问题,并偶然发现了这个问题。

我用了一种更简单的方法来解决它。

方法一

你可以从对象字面量中删除 dataType: 'json' 属性...

方法二

或者你可以像 @Sagiv 所说的那样返回你的数据为 Json


这个 parsererror 消息之所以出现,是因为当你简单地返回一个字符串或其他值时,它实际上不是 Json,因此解析器在解析它时失败。

因此,如果你删除了 dataType: json 属性,它将不会尝试将其解析为 Json

用另一种方法,如果你确保返回你的数据为 Json,解析器就会知道如何正确处理它。

0