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

おそらく答えなので、ここに投稿します。私はあなたが探していると思います:

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

これを使用して、すべてのajaxがいつ完了したかを確認し、応答で何かを行うことができます。

于 2012-11-27T16:12:07.103 に答える
1

OK私はそれを理解しました。なぜなら、すべてのリクエストが完了するまで待機する関数を作成する必要がある前に言ったように、すべてのAJAXリクエストのajaxComplete後に起動するからです。だから私はこのようにしました:

関数を変更しました:

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 に答える
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 に答える