0

私は非常に基本的なシナリオを持っています: 3 つの Google マップを実行して URL を配置し、成功するたびに結果を表示します

これは私がこれまでに持っているものです:

 var  values = ["url1", "url2", "url3"];

  values.forEach(function(value, i) {

     var jsonReq = JSON.stringify({
        action: 101,
        supported: value 
    });

    ...

     $.ajax({
        type: "POST",
        url: "data.ajax.php",
        dataType:"json",
        data:{
            data:jsonReq
        },
        success:function(data){
           // parse results
           ....

        }
    }); 

  });

問題は、成功を待たずに3 つの URL すべてをループして実行することです。

前のリクエストからのレスポンス(コールバック)を取得した場合にのみ、次のリクエストを送信したい。

助言がありますか?

ありがとう、

4

4 に答える 4

5

代わりに再帰を試してください...このように

var currentR = 0;
    var  values = ["url1", "url2", "url3"];
    function sendReqests()
    {
       if(!values[currentR])
       return false;
       var jsonReq = JSON.stringify({
            action: 101,
            supported: values[currentR]
        });
       $.ajax({
            type: "POST",
            url: "data.ajax.php",
            dataType:"json",
            data:{
                data:jsonReq
            },
            success:function(data){
             currentR++;  
              if(values[currentR]){
              sendReqests();
              }
            }
        }); 

    }


    // call the recursive function 

    sendReqests();
于 2013-01-02T09:54:05.150 に答える
3

ajaxリクエストの完全な関数で次のリクエストを呼び出す

var  values = ["url1", "url2", "url3"];

  values.forEach(function(value, i) {

     var jsonReq = JSON.stringify({
        action: 101,
        supported: value 
    });

    ...

     $.ajax({
        type: "POST",
        url: "data.ajax.php",
        dataType:"json",
        data:{
            data:jsonReq
        },
        success:function(data){
           // parse results
           ....

        },
      complete: function(){

      }
   }); 

  })
于 2013-01-02T09:37:15.210 に答える
1

ループを使用する代わりにsetTimeoutを使用できます

var  values = ["url1", "url2", "url3"];
var index = 0;

function repeatedCall(value, i) {

     var jsonReq = JSON.stringify({
                        action: 101,
                        supported: values[index]
                    });
     index++;
     if(index == 4)
         clearTimeout(loop );
     else
         setTimeout(repeatedCall, 0);
}
var loop setTimeout(repeatedCall, 0);
于 2013-01-02T09:36:06.320 に答える
1

の代わりに、 よりも抜けやすいのでforeach使用できます。everyeveryforeach

var  values = ["url1", "url2", "url3"];
function ajaxCall(value) {
    var jsonReq = JSON.stringify({
        action: 101,
        supported: value 
    });

    $.ajax({
        type: "POST",
        url: "data.ajax.php",
        dataType:"json",
        async: false,
        data:{
            data:jsonReq
        },
        success:function(data){
           // parse results
           // if success
           //       return true
           // else
           //       return false

        }
    });
    return true;
}
values.every(ajaxCall);
于 2013-01-02T09:52:39.427 に答える