jquery.Ajax回調成功後數據賦值給全局變量的問題

先來看一代碼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

相關文章
相關標籤/搜索