我在循环和对象数组发送另一个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;
    });

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

#1楼 票数: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一起使用

#2楼 票数:1

您的直觉是正确的-最大的问题是您不想在循环中创建函数。 $.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;
}

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

  ask by Weinz translate from so

未解决问题?本站智能推荐:

1回复

在facebook用户发送邀请请求后调用ajax调用

我想知道当用户点击fb ui邀请上的发送请求按钮时,我应该在哪里发出ajax调用。 目前,我把它放在fb ui语法之后: 但正如所料。 当应用程序打开请求UI时,会执行ajax调用。 我希望在用户点击发送请求之后立即执行ajax调用,而不是在请求UI显示时执行。 单击取消时也是如此。
1回复

使用脸谱图API在Facebook上通过网址发布视频?

我有一个Facebook页面,我正在尝试上传一个已经托管在我的服务器上的视频。 我需要通过javascript执行此操作,而我所拥有的只是视频的src链接(类似于https://cdn.whodaman.net/Q45rt7y.mp4 )。 作为管理员,我拥有所有必需的权限( publish
1回复

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

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

在jQuery中如何发送一个ajax请求后调用一个函数?

浏览器完全发送ajax请求后, myFunc1在jquery调用我的函数: myFunc1 ? 我想在发送了jQuery ajax之后运行回调函数。 我不想complete或success执行此操作,因为我不想等待请求完成。 我想在浏览器发送了ajax请求后立即将其触发。 这是我需要
4回复

使用AJAX/jQuery发布到Facebook墙/源

把头发拉过这一个。 我正在编写一个连接Facebook的网络应用程序,最终会将一些任意信息发布到整个过程中选择的朋友的墙上。 我现在处于最后阶段并希望张贴到墙上会很简单,但我花了很长时间试图解决这个问题,所以我希望有人可以帮助我。 我试图像这样使用ajax发布: 但我只是不断收到
1回复

使用ajax-jquery登录Facebookjavascript

我正在尝试使用ajax,php创建fb javascript日志。 它可以正常工作并从facebook获取所需的数据。 但是,一旦用户单击登录,登录完成后页面将重新加载两次,并且会显示数据。 这是我的代码。 谁能指出错误或链接在哪里?
2回复

jQuery$.each结合AJAX请求-不良做法?

我有以下代码: 我可以像这样访问消息的发帖人ID: data.from.id 。 然后,我要做的是通过AJAX请求运行人员FB ID,然后拉回他们的个人资料图片。 我想我将在现有$ .each内运行另一个$ .each以通过AJAX请求运行每个ID。 因此,1.嵌套$ .each运行
1回复

在AJAX调用中添加FBGraphAPIOAuth令牌

我对编程世界还很陌生,并且已经学习了HTML , CSS和JQuery ,因此我决定承担建立一个显示一些公共FB页面信息的网站的任务。 我正在探索FB Graph API ,并且想在我的ajax调用中使用访问令牌从公共fb页面提取信息。 $.getJSON('https://graph.