好的,所以这只是我代码的一部分,实际上可以正常工作。
var jqxhr = $.getJSON( "main.json", function(data) {
return data;
});
var json;
window.onload = function() {
var jsonTxt = jqxhr.responseText;
json = JSON.parse(jsonTxt);
....
}
但每次尝试第10次我都会收到以下错误:
Uncaught SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at window.onload (profile.js:8)
这真的很烦人,因为它会让我的页面空白。我认为它与我试图解析JSON错误有关 - 或者其他什么。我真的不知道,我期待任何可以引导我解决问题的答案。谢谢。
答案 0 :(得分:6)
意外的“u”是字符串“undefined”的第一个字母。之所以发生这种情况是因为你的两个异步操作(即加载JSON并加载窗口)正在竞争完成,如果JSON加载速度不够快,window.onload
方法将尝试解析不是'的'JSON字符串'尚未装载。
解决方案是在onload
偶数处理程序中移动JSON加载。此外,getJSON
的重点是它已经将您的响应解析为JSON对象,因此不需要JSON.parse()
:
window.onload = function() {
$.getJSON( "main.json", function(json) {
// process the results here
});
}
答案 1 :(得分:0)
在调用JSON.parse()的位置插入try catch块。
文本本身可能不是JSON。
例如......
我认为这是问题所在,因为如果未定义响应文本,那么char&#39; u&#39;位于位置0.所以JSON.parse()正在使用字符串。不是javascript-object-notation文本文件。
if(response !== undefined){
try{
// do parse
}
catch(errror){
console.error("Not a JSON response")
}
}