0

我在 jQuery 中有一个哈希。它被称为字典。

为了填充该哈希,我调用了 createDict() 函数,该函数将返回如下所示的内容,

{"12|345" => " http://www.one.com ", "67|890" => " http://www.two.com "}

var dict = createDict();    

现在对于散列的每个元素,我执行“grabData”方法,它只是一个发布请求,

    $.each(dict, function( key, value ) { 

      data = key.split("|")[0];    

      var a = "";        

      //Calling the function that is a post request.
      grabData(data,"/url",function(returned) {   

          alert(returned); //=> Positive              

          a = returned;

      });

      alert(returned); // => negative

      alert(a); // => negative

    });

//定义grabData

function grabData(input,url,callback){

    $.post(url,input,function(data){                    

          $("div#answer").html(data);

          callback(data); 
     });

}

问题:

  1. 对于 dict 哈希中的每个元素,我执行一个组发布请求并获取返回值并更新“div#answer”。

  2. 我想在另一个数组或散列中收集返回的值,并运行另一个单一的发布请求,其输入将是这个数组或散列。

    笔记:

第二个单独的 post 请求将更新数据库,所以我不希望在第一组 post 请求期间发生这种情况。

4

2 回答 2

1

首先找到您要触发的请求总数(即 No of elements in dict)。这样您就可以设置一个计数器并为每个请求继续增加,并且在最终请求时,您可以收集数据并发出单个发布请求。

var total = dict.length;

设置计数器

var counter = 0;
var returnedData = [];

然后运行你的每个循环

$.each(dict, function( key, value ) { 
//your loop settings

...
   //Calling the function that is a post request.
      grabData(data,"/url",function(returned) {   

          alert(returned); //=> Positive              

          a = returned;
      returnedData .push(returned);
      counter++;
      if(counter == total ){
        //Collect the returned value, which will be in `returnedData` array.
        //make post request with collected data
      }
 });
});
于 2013-03-08T13:36:05.070 回答
1

您需要将运行 POST 的代码放在回调函数中,并检查每次回调函数运行时是否拥有所需的所有数据。就像是:

function grabData(input,url,callback){
    var allDataSoFar = [];
    $.post(url,input,function(data){                    
        $("div#answer").html(data);
        allDataSoFar.push(data);
        if (haveGotAllDataYet(allDataSoFar){
             $.post(...)
        }
    });
}
于 2013-03-08T13:36:17.553 回答