当前位置:  开发笔记 > 编程语言 > 正文

jQuery.ajax()+空JSON对象=解析错误

如何解决《jQuery.ajax()+空JSON对象=解析错误》经验,为你挑选了2个好方法。

使用jQuery加载一些JSON数据时,我得到一个解析错误.这是我的代码片段:

jQuery.ajax({
    dataType: "json",

    success: function (json)
    {
        jQuery.each(json, function ()
        {
            alert(this["columnName"]);
        });
    }
});

解析非空JSON对象时没有错误.所以我的猜测是问题出在我的序列化器上.


问题是:如何格式化jQuery不会考虑格式错误的空JSON对象?

这是我到目前为止所尝试的,没有成功:

{[]}

{[null]}

{}

{null}


{"rows": []}

{"rows": null}

{"rows": {}}



更新:

我能理解我有点模糊 - 让我试着澄清一下:

解析JSON对象不是问题 - JQuery是 - 我想.

jQuery抛出一个解析错误(调用错误函数).似乎jQuery的内部JSON验证不接受任何前面提到的对象.甚至不是有效的.

错误函数的输出是:

XMLHttpRequest:XMLHttpRequest readyState = 4 status = 200
textStatus:parsererror
errorThrown:undefined

这适用于前面提到的所有对象.



1> 小智..:

解决方案是从服务器返回204而不是200的状态代码,204是"无内容"并且它将在不尝试调用解析器时返回成功



2> Simon Liesch..:

首先{[]},{[null]}并且{null}将无法工作,因为它们都是无效的JSON对象(由JSON验证器验证).

其余对象都是有效的JSON对象,因此success应该调用您的函数.

如果传递非数组或类数组的对象对象,则该each函数将json通过其命名属性枚举对象.在你的三个对象,每有一个的情况下,rows属性this将被设置为[],null,和{}分别,没有一个是有一个columnName属性,这样一个未定义的错误将被抛出.

{}另一方面,您的对象没有属性,因此不应该导致错误,因为each调用将循环0次.如果将其添加为success函数的第一行,则显示以下行?

alert(typeof json + ' ' + (json == null));

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有