繁体   English   中英

使用jQuery发送一个AJAX调用,然后再发送一个

Send one AJAX call after the other with jQuery

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在循环和对象数组发送另一个AJAX调用时遇到问题。 代码如下

    var def = true;
    $.each(urls, function(index, val) {
        var postResult = $.Deferred();
        link = 'http://myurl.com' + val.aslug + '/' + val.slug;
        $.when(def).then(function(){
                $.post('https://graph.facebook.com ', {id : link, scrape : 'true' }, function(data, textStatus, xhr) {
                }).always(function(){

                    postResult.resolve(5);
                });

         });
         def = postResult;
    });

问题是第一次和第二次通话都没问题。 但是第三次​​调用和第二次调用相同:/我认为每个都不会更改为下一个对象

2 个回复

在这种情况下,最简单的方法是:将变量链接分配移到“ when-then”构造中。

var def = true;
$.each(urls, function(index, val) {
    var postResult = $.Deferred();

    $.when(def).then(function(){
            var link = 'http://myurl.com' + val.aslug + '/' + val.slug;
            $.post('https://graph.facebook.com ', {id : link, scrape : 'true' }, function(data, textStatus, xhr) {
            }).always(function(){

                postResult.resolve(5);
            });

     });
     def = postResult;
});

由于JS异步功能,您遇到了这个问题。 $ .each()-当您的“延迟的代码段”将运行时,循环根本不会等待。 它遍历数组并创建将要执行的任务队列。

您也可以考虑将$.AJAX与选项async:False一起使用

您的直觉是正确的-最大的问题是您不想在循环中创建函数。 $.when第二次解析时,该闭包内的link变量将不再引用正确的值。 这就是为什么您会收到大量调用相同网址的原因。

另外,要创建承诺序列,您将要使用类似以下的内容: https : //github.com/kriskowal/q#sequences (不确定jQuery承诺是否具有可比较的功能)

示例代码:

// not sure if this is necessary
// haven't used jQuery promises much
var result = $.when(true);

mapUrlsToPosts(urls).forEach(function(f) {
  result = result.then(f);
});

function mapUrlsToPosts(urls) {
  return urls.map(function(url) {

    // create a function that when executed will make a request to the desired url
    return post.bind(null, url);
  });
}

function post(val) {
  var link = 'http://myurl.com' + val.aslug + '/' + val.slug,
      postResult = $.Deferred(),
      params = {
        link: link,
        scrape: 'true'
      };

  $.post('https://graph.facebook.com ', params, function(data, textStatus, xhr) {
  }).always(function(){
      postResult.resolve(5);
  });

  return postResult;
}

编辑:顺便说一句,如果您不需要等待下一个请求之前的完成就可以简化所有操作。 这里的大多数复杂性来自对请求进行排队。

1 中止AJAX和表单提交,保存它们,更改它们,然后再发送

当用户单击某些按钮并提交某些表单时,我需要向其请求其他凭据。 我要这样做的方式是: 拦截提交事件,中止它并存储副本 通过提示对话框要求提供凭据(不是JS本机对话框,因此这都是非阻塞的) 如果用户输入了凭据,则将字段插入事件数据并将其发送到服务器。 我当前的 ...

2 从serialize()再发送一个参数

在我的AJAX代码的“数据”行中,我想从serialize()发送另一个参数(称为“操作”)。 “数据”行看起来像这样(显然不起作用): 附:我序列化一个输入字段,而不是表格! 因此,我需要“手动”添加“操作”参数(例如,它不能是隐藏的输入)。 ...

3 通过 POST PHP 再发送一个值

这是我的第一篇文章,欢迎! 我正在努力解决我的项目中的一个问题。 正如您在我的屏幕截图中看到的,我从数据库中获取并显示在主菜单中的名称很少。 单击“模态”按钮后,引导程序中的模态以 php 形式显示。 用户可以输入 4 位密码,下一步是将此密码与数据库记录匹配。 但是 2 个用户可以拥有相同的 p ...

2020-02-18 21:03:46 2 41   php/ html
4 如何将ListView数据从一个活动发送到另一个活动,然后再发送到另一个活动

我对android很陌生,当我单击ListView整个数据包并使用intent发送数据时,我正在显示ListView以及一些数据,这工作正常,我的疑问是当我从第二个活动向第三个活动发送相同的数据时不仅是我所有的数据, 我在单击使用捆绑软件提交的ListView后显示,但是在单击图像时出现此 ...

2016-02-26 20:32:59 0 106   android
5 在发送 Ping 服务器之前上传 JQuery 文件以获取现有文件

我是 Jquery 文件上传的新手,效果很好。 但我想知道是否有人知道阻止发送上传的好方法,直到可以发送 GET 请求以验证文件不存在? 我正在使用backbone.js 并且已经尝试将拦截附加到提交表单事件和文件输入更改事件。 两者都被绕过。 目前看起来像这样: ...

9 运行EXE,然后再发送文本

有什么方法可以在后台运行Powershell来启动EXE,并等待获取消息“输入服务名称”,然后输入“ xxx” 注意:我不想使用SendKeys或要求UI也EXE不支持传递参数的功能 样品: VB.NET控制台应用程序test.exe。 如何向应用程序发送“是”以开始服务。 ...

10 使用jQuery发送Ajax调用

所以我试图让jquery发送ajax调用来更新注释数据库。 我似乎找不到代码有什么问题。 整天都在互联网上寻找答案。 commentupdate.php ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM