標籤:jquery ajax 回調 全域變數
先來看一代碼
function checkoldpass($pass) { $.ajax({ type: ‘get‘, url: ‘/admin/check‘, data: {‘password‘: $pass}, dataType: ‘json‘, success: function (data) { console.log(data) } }); console.log(123);}
這個運行結果是:
瀏覽器控制台先列印:123,然後才列印返回來的data。
為什麼會是這樣。因為js ajax請求原生就是非同步。
這就是說如果你在ajax回呼函數外聲明的變數,在ajax外列印會是null或者是undefined
function checkoldpass($pass) { var msg = null; $.ajax({ type: ‘get‘, url: ‘/admin/check‘, data: {‘password‘: $pass}, dataType: ‘json‘, success: function (data) { msg = data } }); console.log(msg);}
這樣列印出來的msg肯定是null。因為是非同步,所以js順序執行到msg這裡肯定是空了。
解決這個問題的辦法
function checkoldpass($pass) { var msg = null; $.ajax({ type: ‘get‘, url: ‘/admin/check‘, data: {‘password‘: $pass}, dataType: ‘json‘, async:false, success: function (data) { msg = data } }); console.log(msg);}
在請求的代碼裡加上async:false,把請求設定為同步的。這樣只有回調之後,js才會執行下面的代碼。
但這種體驗個人感覺不好。還是在回調裡完成其它的操作比較好。
jquery.Ajax回調成功後資料賦值給全域變數的問題