Javascript ajax()+;空JSON对象=解析错误
我在使用jQuery加载一些JSON数据时遇到了一个解析错误。以下是我的代码片段:Javascript ajax()+;空JSON对象=解析错误,javascript,jquery,json,Javascript,Jquery,Json,我在使用jQuery加载一些JSON数据时遇到了一个解析错误。以下是我的代码片段: jQuery.ajax({ dataType: "json", success: function (json) { jQuery.each(json, function () { alert(this["columnName"]); }); } }); 解析非空JSON对象时,我没有收到任何错误。所以我猜
jQuery.ajax({
dataType: "json",
success: function (json)
{
jQuery.each(json, function ()
{
alert(this["columnName"]);
});
}
});
解析非空JSON对象时,我没有收到任何错误。所以我猜问题出在我的序列化程序上。
<强> >问题是:< /强>如何格式化jQuery不考虑畸形的空JSON对象?< /P> 这是我迄今为止尝试过的,但没有成功:
{[]}
{[null]}
{}
{null}
{"rows": []}
{"rows": null}
{"rows": {}}
更新: 我可以理解我有些含糊--让我试着澄清一下: 解析JSON对象不是这里的问题——我认为JQuery是 jQuery抛出一个解析错误(调用error函数)。jQuery的内部JSON验证似乎不接受前面提到的任何对象。甚至不是有效的 错误函数的输出为:
XMLHttpRequest:
XMLHttpRequest readyState=4状态=200text状态:
parserror错误抛出:
未定义
这适用于前面提到的所有对象。而不是:
$(json).each(function () { ... });
我认为您希望使用:
$.each(json, function () { ... });
从:
此函数与
-用于迭代,
独占地,在jQuery对象上。
此函数可用于迭代
为了任何事
您是否验证了JSON是否在每次调用之前首先正确返回?将空值设置为{},并验证它是否与前面的一样
此外,了解JSON在有数据时的外观也会有所帮助。您正在查找以下内容:
[]
空数组。也就是说,如果您计划立即迭代它,那么您需要的是一个数组 首先,
{[]}
,{[null]}
和{null}
将不起作用,因为它们都是无效的JSON对象(经验证)
其余的对象都是有效的JSON对象,因此应该调用success
函数
如果传递一个非数组或类似数组的对象,则each
函数将通过其命名属性枚举json
对象。对于三个对象,每个对象都有一个行
属性,此
将分别设置为[]
、空
和{}
,它们都没有列名
属性,因此将引发未定义的错误
另一方面,您的{}
对象没有属性,因此不应该导致错误,因为每个调用将循环0次。如果将其添加为success
函数的第一行,则下一行显示什么
alert(typeof json + ' ' + (json == null));
您的web服务可能返回null。我发现从web服务调用返回null会返回一个状态代码为200“Ok”的响应,但jQuery随后会抛出一个parseerror
如果是这种情况,那么它与您向服务器发送的内容以及服务器返回的内容无关
如果您能够更改web服务,您可能希望尝试返回一个空的JSON对象,或者返回一个默认值,而不是Null。或者,您可以在错误处理程序中检查此错误场景,知道这意味着您的调用返回null。从服务器请求有效JSON时,我遇到了类似的问题
我的服务器提供的内容类型是text/javascript
我没有使用可选的jQuery.ajax设置'dataType',因此jQuery是用javascript(例如填充JSON)而不是纯JSON解释输出
向传递给jQuery的ajax方法的设置对象添加一个数据类型:“JSON”解决了这个问题。也有这个问题,并通过在我的web服务中使用jsonserializer格式化空字符串解决了这个问题。结果是基本上是“\”” 解决方案是从服务器返回204而不是200的状态码,204是“无内容”,它将在不尝试调用解析器的情况下返回成功这是子集的问题,它们没有全部。除了第三个示例之外,所有的都不是有效的JSON,因为字典中没有键,更新了一些try's。仍然存在解析错误。json对象只是一个对象文本?或者不是真的?我想我也有同样的问题。我只是在FireBug中看到了错误消息:“[Exception…”调用方法[nsIDOMEventListener::handleEvent]”nsresult:“0x8057001c(NS_error_XPC_JS_抛出的_JS_对象)”位置:“data:no]”。有什么解决办法吗?输入o。但是谢谢,编辑并保存了。但这并不是一个真正的答案。