繁体   English   中英

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

[英]Unexpected token u in JSON at position 0 (but only sometimes)

好的,所以这只是我的代码的一部分,实际上按照预期的方式工作。

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

那个意外的“你”是字符串“undefined”的第一个字母。 这是因为你的两个异步操作(即加载JSON并加载窗口)正在竞争完成,如果JSON加载速度不够快, window.onload方法将尝试解析未加载的JSON字符串然而。

解决方案是在onload甚至处理程序中移动JSON加载。 另外, getJSON的重点在于它已经将您的响应解析为JSON对象,因此不需要JSON.parse()

window.onload = function() {
    $.getJSON( "main.json", function(json) {
        // process the results here
    });
}

在调用JSON.parse()的位置插入try catch块。

文本本身可能不是JSON。

例如...

我认为这是问题所在,因为如果响应文本未定义,则char'u'位于位置0.因此JSON.parse()正在使用字符串。 不是javascript-object-notation文本文件。

if(response !== undefined){
    try{
    // do parse
    }
    catch(errror){
        console.error("Not a JSON response")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM