使用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
这适用于前面提到的所有对象.
解决方案是从服务器返回204而不是200的状态代码,204是"无内容"并且它将在不尝试调用解析器时返回成功
首先{[]}
,{[null]}
并且{null}
将无法工作,因为它们都是无效的JSON对象(由JSON验证器验证).
其余对象都是有效的JSON对象,因此success
应该调用您的函数.
如果传递非数组或类数组的对象对象,则该each
函数将json
通过其命名属性枚举对象.在你的三个对象,每有一个的情况下,rows
属性this
将被设置为[]
,null
,和{}
分别,没有一个是有一个columnName
属性,这样一个未定义的错误将被抛出.
{}
另一方面,您的对象没有属性,因此不应该导致错误,因为each
调用将循环0次.如果将其添加为success
函数的第一行,则显示以下行?
alert(typeof json + ' ' + (json == null));