4

我正在使用 AJAX 从服务器获取一些值,并且我正在异步执行它。我怎样才能停止以等待 AJAX 请求结束?这是我的代码:

var response = {}
for (var i = 0; i < length; i++){
        $.ajax({
            url : url[i],
            dataType : 'json'
        }).success(function(result) {
            processResult(result);
        })
}

我想我应该创建一个等待的函数,但它不能正常工作:

function wait() {
    for (var name in response) {
        if (response[name] === undefined) {
            setTimeout(function() {
                wait()
            },50)
        }
    }
    processResult(); //this is function where I will process my AJAX result
}

谁能帮我?

4

3 回答 3

1

好的,我想通了。因为正如我之前所说,在每个ajaxCompleteAJAX 请求之后启动,所以我必须创建等待所有请求完成的函数。所以我这样做了:

我改变了我的功能:

var response = {}
for (var i = 0; i < length; i++){
        $.ajax({
            url : url[i],
            dataType : 'json'
        }).success(function(result) {
            processResult(result);
        })
}

至:

    response = {}
    for (var i = 0; i < length; i++){
      callAJAX(url[i]);
    }
_wait4ajax();

函数 callAJAX 是这样的:

function callAJAX(url){
            $.ajax({
                url : url[i],
                dataType : 'json'
            }).success(function(result) {
                processResult(result);
            })
}

并且_wait4ajax是我检查对象的所有属性是否不是undefined这样的函数:(我有应该填写在对象中的属性列表 - 此属性在visibleLayers数组中

function _wait4ajax(){
        var controlArray = [], self = this;

        var length = this.visibleLayers.length;
        for (var i = 0; i < length; i++) {
            if (this.cachedFeatures[this.visibleLayers[i]] === undefined) {
                controlArray.push('false');
            } else {
                controlArray.push('true');
            }
        }
        if (controlArray.indexOf('false') != -1) {
            setTimeout(function() {
                self._wait4ajaxComplete();
            }, 50);
        } else {
            //AJAX has ended - Object is ready
        }
}

我把我的伪代码(为这个站点的目的而创建)和我项目中的实际代码搞砸了,所以它可能不会以这种形式工作,但我想指定这个主题的具体想法。填写免费编辑此帖子。:)

于 2012-11-29T09:31:06.203 回答
1

因为这可能是答案,所以我会在这里发布。我想你正在寻找:

http://api.jquery.com/ajaxComplete/

您可以使用它来找出所有 ajax 何时完成,然后对响应进行处理。

于 2012-11-27T16:12:07.103 回答
0

这个问题的答案将做你想要的:

如何让 jQuery 执行同步而不是异步的 Ajax 请求?

你的代码:

var response = {}
for (var i = 0; i < length; i++){
        $.ajax({
            url : url[i],
            dataType : 'json',
            async:   false,
            success: function(result) {                
                processResult(result);
            }
}
于 2012-11-27T16:11:20.053 回答