gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:47:25 25 4
gpt4 key购买 nike

我在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com