可以将jquery $ .getJSON的JSON数据分配给其他变量吗?

时间:2012-05-11 02:17:21

标签: javascript jquery

我正在使用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 个答案:

答案 0 :(得分:1)

它没有,它不应该因为getJSON在内部进行AJAX调用,AJAX中的第一个A代表Asynchronous,它只是意味着脚本执行赢了等到你的success函数被调用。

您可以使用$.ajax并将async: false传递给其中一个选项,以确保您的脚本等待ajax调用完成,但请注意这样做会冻结浏览器/ tab直到你的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/

  

async默认值:true默认情况下,发送所有请求   异步(即默认设置为true)。如果你需要   同步请求,将此选项设置为false。跨域请求   和dataType:“jsonp”请求不支持同步操作。   请注意,同步请求可能会暂时锁定浏览器,   在请求处于活动状态时禁用任何操作。