【问题标题】:Collect the data returned by a group of post requests and post another single request收集一组 post 请求返回的数据,并 post 另一个单个请求
【发布时间】:2013-02-24 01:09:03
【问题描述】:

我在 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请求会更新数据库,所以我 不希望在第一组发布请求期间发生这种情况。

【问题讨论】:

  • 您的问题实际上并不是问题。到目前为止,您尝试了什么,遇到了什么问题?
  • 感谢您的及时回复。您会看到在grabData 函数之外无法访问变量“returned”。但我想收集所有返回的变量并在 $.each 之外再发一篇文章。我该怎么做?
  • 请看下面的答案,希望对您有所帮助
  • 我会尝试您的解决方案并让您知道。请稍候!

标签: jquery database post asynchronous each


【解决方案1】:

首先找到您要触发的请求总数(即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
      }
 });
});

【讨论】:

  • 警报(dict.length);返回“未定义”..为什么?..dict = {}。
  • 我用它来获取哈希的长度,var total = 0; for (var i in dict){ total++; } ,否则,它正确地工作了你的方法。谢谢大佬!
【解决方案2】:

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

function grabData(input,url,callback){
    var allDataSoFar = [];
    $.post(url,input,function(data){                    
        $("div#answer").html(data);
        allDataSoFar.push(data);
        if (haveGotAllDataYet(allDataSoFar){
             $.post(...)
        }
    });
}

【讨论】:

  • 您的方法或多或少与 Ashwins 的方法相同,但他非常清楚您所说的“haveGotAllDataYet”。他帮助使用了散列的长度并确定何时触发最后的帖子。但是感谢您的贡献。
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 2019-02-03
  • 2017-03-30
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多