在位置0的JSON中出现意外的标记u(但有时只是)

时间:2018-05-04 17:34:55

标签: javascript json

好的,所以这只是我代码的一部分,实际上可以正常工作。

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错误有关 - 或者其他什么。我真的不知道,我期待任何可以引导我解决问题的答案。谢谢。

2 个答案:

答案 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")
    }
}