原生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就行了。
来源:CSDN
作者:猜测7
链接:https://blog.csdn.net/guozhicaice/article/details/103634174