为了账号安全,请及时绑定邮箱和手机立即绑定

jQuery为ajax请求返回“ parsererror”

jQuery为ajax请求返回“ parsererror”

慕少森 2019-11-27 10:19:35
我一直在从jquery收到针对Ajax请求的“ parsererror”,我尝试将POST更改为GET,以几种不同的方式(创建类等)返回数据,但我似乎无法弄清楚问题出在哪里。我的项目在MVC3中,我使用的是jQuery 1.5,我有一个Dropdown,并且在onchange事件上,我触发了一个调用,以根据所选内容获取一些数据。下拉列表:(这会从Viewbag的列表中加载“ Views”,并触发事件可以正常进行)@{    var viewHtmls = new Dictionary<string, object>();    viewHtmls.Add("data-bind", "value: ViewID");    viewHtmls.Add("onchange", "javascript:PageModel.LoadViewContentNames()");}@Html.DropDownList("view", (List<SelectListItem>)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”。
查看完整描述

3 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

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


我用一种简单得多的方法解决了它。


方法一


您可以dataType: 'json'从对象文字中删除该属性...


方法二


或者您可以通过将数据返回为来执行@Sagiv所说的Json。


parsererror出现此消息的原因是,当您仅返回一个字符串或另一个值时,它不是真正的Json,因此解析器在解析时会失败。


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


使用其他方法,如果您确保将数据返回为Json,则解析器将知道如何正确处理它。


查看完整回答
反对 回复 2019-11-27
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

有关正确的方法,请参阅@ 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;

        //...

    }


查看完整回答
反对 回复 2019-11-27
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您已将ajax呼叫响应dataType指定为:


'json'


实际的Ajax响应不是有效的JSON,因此JSON解析器抛出错误。


我建议的最佳方法是将dataType更改为:


'文本'


在成功回调中,验证是否返回了有效的JSON,如果JSON验证失败,则在屏幕上提醒它,以使其明显表明ajax调用实际上是出于什么目的。看看这个:


$.ajax({

    url: '/Admin/Ajax/GetViewContentNames',

    type: 'POST',

    dataType: 'text',

    data: {viewID: $("#view").val()},

    success: function (data) {

        try {

            var output = JSON.parse(data);

            alert(output);

        } catch (e) {

            alert("Output is not valid JSON: " + data);

        }

    }, error: function (request, error) {

        alert("AJAX Call Error: " + error);

    }

});


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 923 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信