2017-08-02 116 views
0

我有一個例子通過ajax獲取數據並做一些事情。條件是這個函數可以重用。可以隨時打電話。處理ajax同步?

<script type="text/javascript"> 

    function getData(value1,value2){ 

     $.ajax({ 
      url: URL, 
      data:{ 
       email:value1, 
       age:value2 
      }, 
      async:false, 
      dataType: "json", 
      type: "get", 
      success: function(data){ 

       var result; 

       result = data.result; 

       console.log("result:"+result); 
      }, 
      error: function(){ 
      } 
     }); 
    }; 

    var data; 

    data = getData("email","age"); 

    console.log("data:"+data); 
</script> 

當我調用ajax時,結果返回後來數據empty.I嘗試使用async false,但只是在AJAX內部確定。

如何做JavaScript等待響應,不再執行,得到響應,然後繼續執行。設置超時不是個好主意,因爲它會導致不同服務器和服務器上的服務器響應速度問題向不同客戶端發出問題

+1

* Syncrhonous的XMLHttpRequest已被棄用的主線程的,因爲其所帶來的影響最終用戶的體驗* - 而不是遠離異步代碼,學會使用它。注意:在你的代碼中,'getData'不返回任何東西,這就是爲什麼'data'沒有定義的原因 –

+0

將'var result;'移動到'getData'的頂部...在'getData'的底部添加'return結果;' –

+0

如果您想要一個包含**異步**請求的答案 - 請參閱https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call - 它看起來像你最初嘗試異步請求和採取同步,因爲你不能異步工作 –

回答

1

可以使用回調在阿賈克斯

例如:

function getData(value1,value2, callback){ 

     $.ajax({ 
      url: URL, 
      data:{ 
       email:value1, 
       age:value2 
      }, 
      dataType: "json", 
      type: "get", 
      success: function(data){ 

       var result; 

       result = data.result; 
    callback(result) 
       console.log("result:"+result); 
      }, 
      error: function(){ 
      } 
     }); 
    }; 

    var data; 

    data = getData("email","age", function(result){ 
    console.log("data:"+data); 
}); 
+0

在這種情況下,爲什麼使用同步請求? –

+0

將async設置爲false意味着您要調用的語句必須先完成才能調用函數中的下一個語句。如果設置async:true,那麼該語句將開始執行,並且將調用下一個語句,而不管異步語句是否已完成。 –

+0

我明白asynch是如何工作的,只需要一個回調函數,你也可以走完整個異步路線。附: '數據'仍然**在你的代碼中是未定義的 –

0

你可以試試這個:

function getData() { 
    $.ajax({ 
     url: URL, 
     ... 
     ... 
     type: 'GET', 
     success : resultData 
    }) 
} 

var resultData = function (data) { 
    console.log(data); 
    // This will be called whenever the data is available 
    // So you execute what ever you want to, once data is available 
    // initiate function that is dependent on that data .... 
} 

getData(); 

注意:千萬不要用async: false,因爲它將使所有未來 代碼等待執行其從來就不是一個好主意,使AJAX異步: 假,請嘗試回調函數方法。它會給你同樣的結果 ,而不會使ajax async:false,並且它更好的方式來做到這一點。