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**
},
4

1 に答える 1

1

getJSONAJAX 呼び出しを内部的に実行しているように、そうすべきではありません。AJAX の最初Aの は を表し、単に関数が呼び出されるAsynchronousまでスクリプトの実行が待機しないことを意味します。success

代わりに、そのオプションの 1 つを使用$.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/

async デフォルト: true デフォルトでは、すべてのリクエストが非同期で送信されます (つまり、これはデフォルトで true に設定されています)。同期リクエストが必要な場合は、このオプションを false に設定します。クロスドメイン リクエストと dataType: "jsonp" リクエストは、同期操作をサポートしていません。 同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間はすべてのアクションを無効にする場合があることに注意してください。

于 2012-05-11T02:20:30.143 に答える