2012-05-11 76 views
0

我正在使用jQuery $ .getJSON(..)來獲得一些json。

傳遞值顯示我「undefined」

有沒有辦法做到這一點?

getTopMenuJson : function(currentPage) { 
    if(currentPage == null) currentPage = 1; 

    var retJSON; 

    $.getJSON(
      requestURLs.topMenuJson, 
      { 
       'ITEM_PER_PAGE' : TopMenuHandler.ITEM_PER_PAGE, 
       'CURRENT_PAGE' : currentPage 
      }, 
      function(JSON) { 
       //alert(JSON); **<--This gives me result (Object)** 
       retJSON = JSON; 
      } 
    ); 

    **alert(retJSON); //<!-- This doesn't, but Undefined** 
}, 

回答

1

它沒有,它不應該作爲getJSON在內部做一個AJAX調用,在AJAX第一A代表Asynchronous,它只是意味着腳本執行不會等到你success功能調用。

您可以改爲使用$.ajax並將async: false傳遞給其中一個選項,以確保腳本等待ajax調用完成,但請注意,這樣做會凍結瀏覽器/選項卡,直到您的AJAX調用爲止完了。

$.ajax({ 
    url: requestURLs.topMenuJson, 
    dataType: 'json', 
    data: 
    { 
    'ITEM_PER_PAGE' : TopMenuHandler.ITEM_PER_PAGE, 
    'CURRENT_PAGE' : currentPage 
    }, 
    success: function(JSON) { 
    //alert(JSON); **<--This gives me result (Object)** 
    // this won't work without async:false 
    // as the execution of script won't wait until this function 
    // is finished 
    retJSON = JSON; 
    }, 
    async: false 
}); 

http://api.jquery.com/jQuery.ajax/

異步默認:true默認情況下,所有的請求被髮送異步 (即這是默認設置爲true)。如果您需要 同步請求,請將此選項設置爲false。跨域請求 和dataType:「jsonp」請求不支持同步操作。 請注意,同步請求可能會暫時鎖定瀏覽器,在請求處於活動狀態時禁用任何操作。

+0

嗯..我認爲這個問題是當試圖將值賦給'retJSON'。而不是這樣做,他正在重新聲明'retJSON' var。 – lu1s

+0

@ lu1s,即使他在回調中使用了'retJSON = JSON',那也不行,:)但是,你有一點,我會編輯我的代碼片段 –

+0

我不完全理解,但你的來源完美的作品! –

相關問題