2

jqueryを使用して単純なajaxリクエストを作成しています。以下は私のajax関数です。

     var makeJqueryAjaxRequest = function(arrParam) {
         var request = $.ajax({
             url : arrParam['url'],
             async: false,
             type: arrParam['type'],
             data: arrParam['data'],
             dataType: arrParam['data_type'],
             success: function(data) {
                 if(data){ 
                 return data;   
                 }
             }
         });
     }

これが私の関数呼び出しです:

      var items = {
       "type" : 'POST',
       "url" : ajaxGetUrl,
       "data" : arrParam['data'],
       "data_type" : 'html'
      };
      var msg = makeJqueryAjaxRequest(items);

makeJqueryAjaxRequest関数が常にnull値を返す理由がわかりません。成功したデータに警告した場合:データは完全に取得されています。しかし、返そうとするとnull値が返されます

4

1 に答える 1

8

非同期コールバック関数から値を返すことはできません。

これは、 ajaxイベント(この場合は成功)が発生したときにjQueryによって呼び出されるコールバックであるためsuccessです。したがって、この関数から何かを返すことは、jQueryコードに返されるため、効果はありません。async

あなたは以下を使うことができます

var makeJqueryAjaxRequest = function(arrParam) {
     var request = $.ajax({
        url : arrParam['url'],
        async: false,
        type: arrParam['type'],
        data: arrParam['data'],
        dataType: arrParam['data_type']

     });
   return request;
  }

その後、

 makeJqueryAjaxRequest(items).done(function(data){
    if(data){
      var msg  = data;  
      // do whatever you like with msg now
    }
 });

代替のコールバックアプローチ:

var makeJqueryAjaxRequest = function(arrParam,callback) {
     var request = $.ajax({
        url : arrParam['url'],
        async: false,
        type: arrParam['type'],
        data: arrParam['data'],
        dataType: arrParam['data_type'],
        success: function(data) {
           if(data){ 
              callback(data); 
           }
       }
     });

  }

次に、次のように使用します

 makeJqueryAjaxRequest(items,function(data){
    // do whatever you like with data
 });

Doc on$.ajax()

ノート

そして、これらのアプローチのいずれかを使用するasync: false必要はありません。あなたはそれを取り除くことができます。ドキュメントが言うように

jQuery 1.8以降、async:falseの使用は非推奨になりました

于 2012-06-27T09:48:17.083 に答える