javascript - 数据类型为 'json' 的 jQuery ajax 方法错误地解析了 json 数据

标签 javascript jquery ajax getjson

我在使用 jQuery 1.4.2 时遇到一些莫名其妙的行为,我开始认为这可能是一个 safari 问题,而不是 jQuery 问题。让我解释一下。

我通过像这样使用 .getJSON 开始的很简单:

$.getJSON("/challenge/results", form_data, function(data){
  //I know console.log is bad news, just a simplification.
  console.log('data', data); 
}

日志给了我一些类似的东西

>locations: Array (1)

虽然我期待一个大小为 2 的数组。所以我查看了响应中的 json:

{"locations":
[{"customer_id":2,"editable":true,"id":971,"latitude":43.659208,"longitude":-79.407501,"max_zoom":25,"min_zoom":9,"name":"test"},
{"customer_id":3,"editable":true,"id":974,"latitude":36.746944,"longitude":-107.970899,"max_zoom":25,"min_zoom":9,"name":"test2"}]}

为了清楚起见,我已经大大简化了这一点,但据我所知,收到的 json 是完全有效的(通过 Rails 以编程方式生成)。 [更新: JSONLint 证实了这一假设。]

我对此感到惊讶,所以我将我的请求转换为 $.ajax 请求以查看它们之间是否存在细微差别(从那时起,查看 jQuery 的源代码我发现 $.getJSON 只是调用 $. Ajax )。

    $.ajax({
        url:"/challenge/results",
        dataType: 'json',
        data: form_data,
        cache:false,
        success: function(data, textStatus){
            console.log("data!", data, textStatus);
        });

但是,唉!相同的响应:

locations: Array (1) success

在这一点上,我必须承认 - 我有点傻了,所以我想我会尝试一些注定会失败的事情:

    $.ajax({
        url:"/challenge/results",
        dataType: 'text',
        data: form_data,
        cache:false,
        success: function(data, textStatus){
            console.log("Parsed:!", $.parseJSON(data), textStatus);
        });

令我惊讶的是,我的控制台显示:

locations: Array (2) success

我被难住了。在这一点上,我坚持不懈地仔细研究了 jQuery 源代码 (1.4.2)。我想不出所料,ajax 函数似乎不处理 json 解析本身(尽管我必须承认,我不能确定)。

我完全不知道为什么会发生这种情况 - 感谢任何帮助。

最佳答案

也许我错过了什么,但我注意到您的 JSON 是一个具有单个属性(“位置”)的对象,其值是一个数组。你试过吗:

$.getJSON("/challenge/results", form_data, function(data){
  //I know console.log is bad news, just a simplification.
  console.log('data', data.locations); 
}

关于javascript - 数据类型为 'json' 的 jQuery ajax 方法错误地解析了 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046529/

相关文章:

javascript - AngularJS 与 Bootstrap 导航栏一起用于单页应用程序

javascript - JsTree如何创建根节点

jquery - 使用jquery和参数调用WCF服务

javascript - 在 addthis 分享栏上动态更改 URL 适用于除分享计数之外的所有内容

javascript - 从另一个文件执行脚本

ajax - 对 Controller 的简单 AJAX 请求 - Symfony3

javascript - 限制父 div 中的可选 div

php - 如何在 PHP 中立即执行匿名函数?

JQuery和多个单选按钮组问题

c# - 使用 Json 将具有两个对象的 View 模型传递给 Controller