2013-01-10 216 views
0

可能重複:
jQuery global variable problemAJAX請求變量問題

我做一個jQuery AJAX調用,我想保存到一個變量的響應。但是這個變量沒有AJAX調用函數之外的響應值。我如何獲得AJAX調用函數之外的響應?

例子:

var responseText = ''; 
$.ajax({ 
    url: 'clients_handler.php', 
    type: 'post', 
    data: { action: 'check_email', email: email }, 
    success: function(data) { 
     responseText = jQuery.parseJSON(data); 
    } 
}); 
console.log(responseText); 

所以從我的例子作爲AJAX功能之前設置responseText將是空的。 如何使用AJAX響應值設置此變量?

+2

如果我有£1爲每個這個問題被問的時間... –

+0

你會在所有的地方你是最富有的人! –

+0

如果您計算任何同步問題(在元素位於DOM之前調用事件附件),則爲雙數。 –

回答

0

簡單的答案是,AJAX異步觸發。實質上,這意味着你不知道何時完成ajax代碼,因此之後的任何代碼行可以在$.ajax完成之前(但不一定)完成之前調用$.ajax。這是爲什麼回調的Ajax是必要的。

一種解決方案是通過使用jQuery.ajax選項async: false來使ajax請求同步,但這可能不是所期望的。

真正的解決方案是恰當地使用回調 - 在success:函數內使用responseText所需的所有工作。

不喜歡所有的代碼在一個地方嗎? jQuery的是不夠好創建遞延,並有jqxhr實現它:

var jqxhr = $.ajax({url: url, data: data}); 
//thousands of lines of code here 
$.when(jqxhr).done(function (responseText) { console.log(responseText); }); 
1

您無法以您想要的方式保存變量,因爲它位於閉包內。 您可以做的最好的做法是將響應數據傳遞給請求完成後將執行的函數。這裏有一個例子:

//code 
$.ajax({ 
    url: 'clients_handler.php', 
    type: 'post', 
    data: { action: 'check_email', email: email }, 
    success: function(data) { 
     responseHandler(data); 
    } 
}); 


function responseHandler(data){ 
    console.log(data); 
} 
+0

這也可以寫成'success:responseHandler' –

+0

是的,但他想要的代碼在$ .ajax之外,不知道爲什麼 – user1966829