JSON.parse Jquery计时问题/冲突

时间:2014-01-14 23:10:50

标签: javascript jquery json web-services

此服务返回有效的JSON数据

var gridValsstr;
$.ajax({
    type: "GET",
        url: "InsertMessage",
        cache: false,
        success: function(data)
        {
            //  alert(data);
            gridValsstr = data;
        },
        error: function(xhr, status, error) {
            alert(xhr.responseText);
        }
});

但是在这一行:

var gridvals = JSON.parse(gridValsstr);

我收到错误:

SyntaxError: JSON.parse: unexpected character

然后导致我脚本的其余部分失败......

但是,如果我在该行放置一个断点并等待几秒钟,该行正确处理并将JSON加载到UI中。所以我认为它处理得太快或者变量还没有完全准备好什么呢?

2 个答案:

答案 0 :(得分:0)

很可能是因为Ajax调用是异步的,并且在请求完成之前您的JSON.parse行正在运行。

断点暂停执行的时间足以让Ajax请求完成。

答案 1 :(得分:0)

跟随Fabricio的链接,看起来在我尝试访问var之前,异步请求没有完成。所以下面的代码解决了问题。记住还要将与调用结果交互的任何代码放入.done(){.....}中,它会起作用。

getFilters().done(function(r) {
if(r) {
    gridValsstr = r;
    gridvals = JSON.parse(gridValsstr);     
}
else
{
    //alert("r sucks");
}
})
.fail(function(x) {
    alert("didn't work.")
});