XMLHttpRequest的POST同步請求代碼

原生JS的異步POST請求回調代碼如下:
function test(url, param, callback) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", url, true);
    xmlhttp.setRequestHeader("Content-Type", "application/json;charset=utf-8");
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // 異步成功回調
            var result = xmlhttp.responseText;
            if (callback) {
                callback(result);
            }
        }
    };
    xmlhttp.send(JSON.stringify(param));
}


現在要改成同步POST返回參數,關鍵點雖然在於xmlhttp.open參數改成false(網絡上到處都是),但是具體怎麼返回參數查了好多才發現方法:
function test(url, param) {
    var xmlhttp = new XMLHttpRequest();
    var result = null
    xmlhttp.open("POST", url, false);
    xmlhttp.setRequestHeader("Content-Type", "application/json;charset=utf-8");
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // 同步請求成功
            result = xmlhttp.responseText;
        }
    };
    xmlhttp.send(JSON.stringify(param));
    return result;
}
我之前測了好幾版,onreadystatechange裏的result雖然有值,但在裏面寫return是沒有用的,它的運行順序是xmlhttp.send之後進入onreadystatechange,這裏面result賦值之後,再跳出來到function最後的return。

至於那個xmlhttp.send,是請求時發送的參數,不是得到的返回結果參數,所以GET方法的話填null就行了。

發佈了21 篇原創文章 · 獲贊 3 · 訪問量 8823
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章