我正在使用XMLHttpRequest()执行异步请求来加载json文件。我需要等待请求完成,然后再继续。
我看到ajaxComplete()应该这样做,但是我不能将它应用到我的实际代码中并使其正常工作。
这里我设置了通过异步请求调用json的函数
function ajaxCall(){
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
arrayImages = JSON.parse(xmlhttp.responseText);
output(arrayImages);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
我在这里调用该功能
ajaxCall();
现在我希望它已经完成
do other things
任何帮助?
谢谢!
答案 0 :(得分:1)
您有两种选择。
A Promise
function ajaxCall(){
return new Promise(function(success){
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
arrayImages = JSON.parse(xmlhttp.responseText);
output(arrayImages);
success();
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
});
}
然后你可以在完成后做点什么
ajaxCall().then(function(){
// Do stuff after
});
或您可以使用回调...
function ajaxCall(callback){
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
arrayImages = JSON.parse(xmlhttp.responseText);
output(arrayImages);
callback();
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
然后像这样做
ajaxCall(function(){
// do stuff after
});
答案 1 :(得分:1)
ajaxComplete
是jQuery库的一部分。它只与jQuery ajax请求绑定。虽然这些通常包装XMLHttpRequest,但是当您手动使用它们时,它们无法触及XMLHttpRequest。
要在响应返回后运行一些代码,您需要等待合适的事件。你已经在这做了:
if(xmlhttp.readyState==4 && xmlhttp.status==200){
在if语句中收到响应后,放置要运行的代码。
如果要使ajaxCall
可重用,则将函数作为参数传递给它,然后在if
语句中调用该函数。