让 ajax 等待每个 get 完成

发布于 11-29 02:28 字数 956 浏览 1 评论 0原文

我有一个 jquery .each 循环,里面有一个 .get 。我想等到循环内的所有获取都完成(每个获取都会在 .complete 处将一个新元素推送到数组中),然后向 php 文件发出 ajax post 请求以保存创建的数组。我不知道如何让 ajax 请求等待每个请求完成。到目前为止,ajax 触发速度非常快,因此数组仍然是空的,因为当它触发时,每个内部的获取仍未完成。也许你有一个想法。

这是脚本:

$('#ScanButton, .ScanButton').click(function() {

var array = ["http://www.xyz.com/bla/bla/summary.html",
             "http://www.xyz.com/blu/blu/summary.html",
            ];

dataArray = [];

$.each(array, function(n, val) { 


    $.get(val, function(res) { //get the html source of this website



      var data = {

      }

  }).complete(function() { 
        alert("complete"); 
        dataArray.push(data);
    });

});

    data = YAHOO.lang.JSON.stringify(dataArray);      

  $.ajax({
    async:           false,
    type:           'post',
    cache:          false,
    url:            'test.php',
    data:           {myJson:  data}
    });

  return false;

});

我很感激任何帮助。谢谢 :)

I have a jquery .each loop with a .get inside. I want to wait until all gets inside the loop are completed (each get pushes at .complete a new element into an array) and then make an ajax post request to a php file to save the created array. I don't know how I can make the ajax request wait until the each is finished. Until now the ajax fires very quickly and therefore the array is still empty as the gets inside the each are still not finished when it fires. Maybe you have an idea.

Here is the script:

$('#ScanButton, .ScanButton').click(function() {

var array = ["http://www.xyz.com/bla/bla/summary.html",
             "http://www.xyz.com/blu/blu/summary.html",
            ];

dataArray = [];

$.each(array, function(n, val) { 


    $.get(val, function(res) { //get the html source of this website



      var data = {

      }

  }).complete(function() { 
        alert("complete"); 
        dataArray.push(data);
    });

});

    data = YAHOO.lang.JSON.stringify(dataArray);      

  $.ajax({
    async:           false,
    type:           'post',
    cache:          false,
    url:            'test.php',
    data:           {myJson:  data}
    });

  return false;

});

I appreciate any help. Thank you :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我三岁2024-12-06 02:28:27

Underscore.js 有一个针对此类问题的优雅解决方案

var renderNotes = _.after(notes.length, render);
_.each(notes, function(note) {
  note.asyncSave({success: renderNotes}); 
});
// renderNotes is run once, after all notes have saved.

Underscore.js has an elegant solution to this sort of problem.

var renderNotes = _.after(notes.length, render);
_.each(notes, function(note) {
  note.asyncSave({success: renderNotes}); 
});
// renderNotes is run once, after all notes have saved.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文