2012-05-11 53 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

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

相关问题