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