先來看一代碼
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纔會執行下面的代碼。
但這種體驗個人感覺不好。還是在回調裏完成其它的操作比較好。