2016-09-13 8 views
0

jquery非同期AJAX要求のスタックオーバーフローに関する多くのトピックを取り上げました。ここに私のコードです。Jquery非同期呼び出しは未定義の値を返す

funciton ajaxCall(path, method, params, obj, alerter) { 
var resp = ''; 
$.ajax({ 
    url: path, 
    type: method, 
    data: params, 
    async: false, 
    beforeSend: function() { 
     $('.black_overlay').show(); 
    }, 
    success: function(data){ 
     console.log(data); 
     resp = callbackFunction(data, obj); 
     if(alerter==0){ 
      if(obj==null) { 
       resp=data; 
      } else { 
       obj.innerHTML=data; 
      } 
     } else { 
      alert(data); 
     } 
    }, 
    error : function(error) { 
     console.log(error); 
    }, 
    complete: function() { 
     removeOverlay(); 
    }, 
    dataType: "html" 
}); 

return resp; 
} 

問題は、私がasynをfalseにすると、respの適切な値が得られるという問題です。しかし、の前には、が動作しません。

asyncがtrueの場合、beforeSendは正常に動作しますが、resp値は正しく返されません。常に空白です。

両方の問題を解決する方法はありますか?私はbeforeSend関数とresp値の両方を取得します。

おかげ

+0

ところで、callbackFunctionは未定義のようです。 –

+1

[非同期呼び出しから応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Rajesh

+0

データの価値は? –

答えて

1

使用async:falseと実行手動$.ajax呼び出しの前beforeSendに割り当てられている機能:

var resp = ''; 
$('.black_overlay').show(); 
$.ajax({ 
    ... 

こと、または非同期タスクとコールバック関数を使用する方法を学びます。ウェブ上には多くの素敵なチュートリアルがあります。

0
  1. は、コード resp = data;respHasChanged();
0
あなたがこのように再構築することができます

を使用し、あなたが成功したデータを取得するとき

  • は、1つの余分機能respHasChanged()
  • を作成し、関数からresp変数を取り出し(非同期で使用しない理由は?)

    function ajaxCall(path, method, params) { 
        return $.ajax({ 
         url: path, 
         type: method, 
         data: params, 
         beforeSend: function() { 
          $('.black_overlay').show(); 
         }, 
         dataType: "html" 
        }); 
    } 
    

    あなたのjavascriptファイルで呼び出します。

    ajaxCall(YOUR_PATH, YOUR_METHOD, YOUR_PARAMS) 
        .done(function(data) { 
         console.log(data); 
    
         // DO WHAT YOU WANT TO DO 
    
         if (alerter == 0 && obj !== null) { 
          obj.innerHTML = data; 
         } else { 
          alert(data); 
         } 
        }).fail(function(error) { 
         console.log(error); 
        }).always(function() { 
         removeOverlay(); 
        }); 
    
  • 関連する問題