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纔會執行下面的代碼。

但這種體驗個人感覺不好。還是在回調裏完成其它的操作比較好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章