0

这更像是一个程序问题,而不是其他任何事情。我很好奇为什么会发生这种情况,我似乎在 ECMA 脚本文档中找不到任何关于此“功能”的文档。

当我在 jQuery 中对我的服务器进行 AJAX 调用时,它会向页面返回以下 JSON 响应:

{"version":"v1","status":"OK","timestamp":"2013-02-14 10:32:45","data":"true","error":""}

有了这个字符串,我必须调用 jQuery.parseJSON(string); 将其作为对象获取,并且能够将其作为对象引用。

但是,当我的服务器返回如下内容时:

{"version":"v1","status":"OK","timestamp":"2013-02-14 10:12:19","data":{"a":"asgsadfga","b":false,"c":[]},"error":""}

Javascript 会自动加载这个对象而不需要解析。看起来因为这个例子返回了一个嵌套对象,尽管它是作为字符串从服务器返回的,Javascript 会立即识别出来,并为我解析字符串。

这是预期的功能吗,如果是这样,有人可以指出我的文档吗?

编辑:

这是有问题的 AJAX 调用:

    jQuery.ajax({
        url: url,
        type: 'GET',
        async: false,
        success: function (result) {
            console.log(result)
        }
4

3 回答 3

2

确保您的服务器设置正确的 Content-Type 响应 HTTP 标头:

Content-Type: application/json

这样 jQuery 会自动将服务器返回的 JSON 字符串解析为一个 javascript 对象,该对象将作为参数传递给您的成功回调。

或者,如果由于某种原因您有一些无法控制的损坏的服务器端脚本,您可以设置dataType参数以强制 jQuery 将结果解析为 JSON:

$.ajax({
    url: '/script.cgi',
    type: 'POST'
    dataType: 'json',
    success: function(result) {
        // result will be a javascript object 
    }
});

但显然正确的做法是修复您的服务器端脚本以返回正确的 Content-Type 响应标头。

于 2013-02-14T17:49:24.713 回答
1

根据dataType下 jQuery API Documentation 中的 ajax() :

dataType(默认值:Intelligent Guess(xml、json、script 或 html))Type:String 您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据响应的 MIME 类型推断它(XML MIME 类型将产生 XML,在 1.4 中 JSON 将产生 JavaScript 对象,在 1.4 中脚本将执行脚本,其他任何内容都将是作为字符串返回)。

希望这可以帮助。

于 2013-02-14T17:55:28.713 回答
0

您应该指定dataTypejson您的$.ajax通话中。dataType 是您希望从服务器接收的 MIME。contentType 是服务器对您的期望。

于 2013-02-14T17:52:52.223 回答