原生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就行了。