Javascript ajax()+;空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加载一些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状态=200
text状态:
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。但是谢谢,编辑并保存了。但这并不是一个真正的答案。