未捕获的SyntaxError:json中的意外标记u

时间:2015-10-15 12:25:49

标签: json

我在网上看到意外的令牌问题可能来自使用JSON.parse()

我收到此错误Uncaught SyntaxError: Unexpected token u

我做错了什么?

我的代码看起来像这样

var t=null;
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(responseText)
{
    if (xmlhttp.readyState == 4 &&xmlhttp.status==200)
    var obj = JSON.parse(xmlhttp.responseText);
    var str=JSON.stringify(obj);
    var newArr = JSON.parse(str);
    var len=newArr.length;
    $.mobile.pageContainer.pagecontainer( "change","sales_home.html");
    $(document).on('pageshow', "#temp", function (event, data) {
        while (len > 0) {

          len--;
        }
    });
}
xmlhttp.onerror=function(E)
{
    alert("error"+ E);
}
xmlhttp.open("GET","url",true);
xmlhttp.send();

1 个答案:

答案 0 :(得分:2)

如果您一致且正确地缩进代码,问题就会变得明显:

var t = null;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(responseText) {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        var obj = JSON.parse(xmlhttp.responseText);
    var str = JSON.stringify(obj);                       // <====
    var newArr = JSON.parse(str);                        // <====
    var len = newArr.length;
    $.mobile.pageContainer.pagecontainer("change", "sales_home.html");
    $(document).on('pageshow', "#temp", function(event, data) {
        while (len > 0) {

            len--;
        }
    });
}
xmlhttp.onerror = function(E) {
    alert("error" + E);
}
xmlhttp.open("GET", "url", true);
xmlhttp.send();

注意代码如何

var str = JSON.stringify(obj);
var newArr = JSON.parse(str);

无论readyStatestatus的价值是什么。这会导致错误,因为obj将为undefined,因此JSON.stringify(obj)将返回undefined,因此JSON.parse会将其强制转换为字符串"undefined" ,它无法解析,失败了第一个字符u

您可能想要添加一个块:

var t = null;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(responseText) {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { // Block starts here
        var obj = JSON.parse(xmlhttp.responseText);
        var str = JSON.stringify(obj);
        var newArr = JSON.parse(str);
        var len = newArr.length;
        $.mobile.pageContainer.pagecontainer("change", "sales_home.html");
        $(document).on('pageshow', "#temp", function(event, data) {
            while (len > 0) {

                len--;
            }
        });
    }                                                       // Block ends here
}
xmlhttp.onerror = function(E) {
    alert("error" + E);
}
xmlhttp.open("GET", "url", true);
xmlhttp.send();

不完全遵循为什么你要解析,然后进行字符串化,然后再次解析...或者为什么你有一个空的while循环......