如何使用应用于XMLHttpRequest的ajaxComplete

时间:2016-11-09 14:18:36

标签: javascript json ajax asynchronous

我正在使用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

任何帮助?

谢谢!

2 个答案:

答案 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语句中调用该函数。