2014-01-14 79 views
0

此服務將返回有效的JSON數據JSON.parse jQuery的計時問題/衝突

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

然後使我的腳本的其餘部分失敗...

但是,如果我把一個斷點在該行a nd等待幾秒鐘後,該行會正確處理並將JSON加載到用戶界面中。所以我認爲它處理得太快,或者這個變量還沒有完全準備好,或者什麼東西?

+0

您的代碼不顯示'var gridvals = JSON.parse(gridValsstr);'line。無論如何,你爲什麼不使用['.getJSON()'](http://api.jquery.com/jQuery.getJSON)? –

+0

您的設置看起來像是一個笨蛋http://stackoverflow.com/q/14220321/1331430 –

+0

Thx Fabricio。馬特 - 我需要發送選項,我認爲$ .getJSON()不接受那些,反正。謝謝。 – user3196063

回答

0

很可能是因爲Ajax調用是異步的,並且您的JSON.parse行在請求完成之前正在運行。

中斷點正在暫停執行足夠長的時間以完成Ajax請求。

0

跟着從Fabricio的鏈接,看起來像異步請求沒有完成之前,我試圖訪問變種。所以下面的代碼解決了問題。請記住還要將與調用結果相互作用的任何代碼放入.done(){.....},它將起作用。

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