而通常我們(其實只有我自己?)下意識的寫法會這樣
var ajax_response = "";但其實ajax中的success的ajax_response與外層的ajax_response是不相干,應該說是同一個ajax_response,但在這種寫法底下msg並沒有丟到ajax_response
$.ajax({
url: http://xxx.xxx.xxx.xxx/xxx.xxx,
success: function(msg) {
ajax_response = msg;
}
});
alert(ajax_response);
原因在:http://api.jquery.com/jQuery.ajax/
jquery在ajax的async屬性中寫到,預設是非同步發送(By default, all requests are sent asynchronously)。
那何謂非同步發送(或稱異步發送),其實就是為了保持頁面的執行效率,所以在ajax發送過程到url-server回應的中間,script會持續的往下運作,以免發生url-server timeout時間過久導致頁面delay的狀況。
但如同我們上述的寫法,在非同步的前提下,ajax_response是必須等到url-server回應之後才會取得msg(ajax的回饋),所以我們在alert(ajax_response)時會是空值…因為在alert之前,一般的url-server都沒有那麼快的回饋。
如果我們要改為同步,也就是必須先拿到ajax_response的話,只要在ajax的屬性中加上async: false即可。
沒有留言:
張貼留言