我有以下脚本,其最终目的是获取本地JSON文件并使用其内容填充列表。问题是永远不会检索文件,而是调用fail函数,而且,令人费解的是,函数的参数包含JSON文件的内容为'responseText'。是什么给了什么?
在最糟糕的情况下,我可以将responseText转换为JSON对象,然后使用它来填充我的列表,但我宁愿弄清楚为什么它不按照预期的方式工作。
$( function() {
$.getJSON("public/data/opps.json", function(data) {
console.log(data); // Never executes
})
.fail(function(msg) {
console.log(msg['responseText']); // Prints the contents of opps.json as a string
});
});
答案 0 :(得分:2)
问题是opps.json不是有效的JSON文件。
当我尝试你的代码并确保内容是JSON时,它起作用了。例如,如果opps.json是:
[1,2,3]
一切都按预期工作。但是,如果是这样的话:
xyz
然后失败了。
此外,在.fail中添加不同的消息(例如:console.log('FAIL'))以确保显示失败,以便您可以看到正在发生的事情。
答案 1 :(得分:1)
我认为您的JSON文件很可能无效,例如有语法错误。这也在jQuery's documentation中提到过:
重要提示:从jQuery 1.4开始,如果JSON文件包含语法错误, 请求通常会无声地失败。避免经常手工编辑 因此JSON数据。 JSON是一种数据交换格式 语法规则比JavaScript的对象更严格 字面符号。例如,所有以JSON表示的字符串, 无论是属性还是价值,都必须附上 双引号。有关JSON格式的详细信息,请参阅http://json.org/。
简而言之,jQuery将尝试解析使用$.parseJSON()
检索到的JSON。如果失败,那么它会将无效的JSON传递给fail
处理程序,而不是success
处理程序。