先來看一代碼ajax
function checkoldpass($pass) { $.ajax({ type: 'get', url: '/admin/check', data: {'password': $pass}, dataType: 'json', success: function (data) { console.log(data) } }); console.log(123); }
這個運行結果是:json
瀏覽器控制檯先打印:123,而後纔打印返回來的data。瀏覽器
爲何會是這樣。由於js ajax請求原生就是異步的。異步
這就是說若是你在ajax回調函數外聲明的變量,在ajax外打印會是null或者是undefined
async
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這裏確定是空了。ide
解決這個問題的辦法函數
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纔會執行下面的代碼。url
但這種體驗我的感受很差。仍是在回調裏完成其它的操做比較好。get