Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery一个接一个地发送AJAX调用_Javascript_Jquery_Ajax_Facebook Graph Api - Fatal编程技术网

Javascript 使用jQuery一个接一个地发送AJAX调用

Javascript 使用jQuery一个接一个地发送AJAX调用,javascript,jquery,ajax,facebook-graph-api,Javascript,Jquery,Ajax,Facebook Graph Api,在循环和数组对象时,我在一个接一个地发送AJAX调用时遇到问题。代码如下 var def = true; $.each(urls, function(index, val) { var postResult = $.Deferred(); link = 'http://myurl.com' + val.aslug + '/' + val.slug; $.when(def).then(function(){

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

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

在这种情况下,最简单的方法是: 将变量链接分配移动到“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异步能力。$。当“延迟的代码段”运行时,每个()循环都不会等待。它在数组中循环,并创建一个将要执行的任务队列


您也可以考虑使用<代码> $.Ajax < /C> >选项>代码>异步:false < />代码,而不是

,在这种情况下最简单的方式是: 将变量链接分配移动到“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异步能力。$。当“延迟的代码段”运行时,每个()循环都不会等待。它在数组中循环,并创建一个将要执行的任务队列


您也可以考虑使用<代码> $.Ajax < /C> >选项>代码>异步:false < />代码,而不是

,在这种情况下最简单的方式是: 将变量链接分配移动到“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异步能力。$。当“延迟的代码段”运行时,每个()循环都不会等待。它在数组中循环,并创建一个将要执行的任务队列


您也可以考虑使用<代码> $.Ajax < /C> >选项>代码>异步:false < />代码,而不是

,在这种情况下最简单的方式是: 将变量链接分配移动到“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异步能力。$。当“延迟的代码段”运行时,每个()循环都不会等待。它在数组中循环,并创建一个将要执行的任务队列


您也可以考虑使用<代码> $Ajax < /C> >选项>代码>异步:false ,而不是

您的直觉是正确的,最大的问题是您不想在循环中创建函数。当第二次解析时,该闭包中的
链接
变量将不再引用正确的值。这就是为什么你会收到一堆对同一个url的调用

此外,要创建一系列承诺,您需要使用如下内容:(不确定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;
}

编辑:顺便说一下,如果您不需要等待上一个请求完成后再进行下一个请求,那么所有这些都可以简化。这里的大部分复杂性来自对请求的排队。

你的直觉是正确的-最大的问题是你不想在循环中创建函数。当第二次解析时,该闭包中的
链接
变量将不再引用正确的值。这就是为什么你会收到一堆对同一个url的调用

此外,要创建一系列承诺,您需要使用如下内容:(不确定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;
}

编辑:顺便说一下,如果您不需要等待上一个请求完成后再进行下一个请求,那么所有这些都可以简化。这里的大部分复杂性来自对请求的排队。

你的直觉是正确的-最大的问题是你不想在循环中创建函数。当第二次解析时,该闭包中的
链接
变量将不再引用正确的值。这就是为什么你会收到一堆对同一个url的调用

此外,要创建一系列承诺,您需要使用如下内容:(不确定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;
}

编辑:顺便说一下,如果您不需要等待上一个请求完成后再进行下一个请求,那么所有这些都可以简化。这里的大部分复杂性来自对请求的排队。

你的直觉是正确的-最大的问题是你不想在循环中创建函数。当第二次解析时,该闭包中的
链接
变量将不再引用正确的值。这就是为什么你会收到一堆对同一个url的调用

此外,要创建一系列承诺,您需要使用如下内容:(不确定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;
}

编辑:顺便说一下,如果您不需要等待上一个请求完成后再进行下一个请求,那么所有这些都可以简化。这里的大部分复杂性来自于对请求进行排队。

我们可以看到什么定义了
url
?为什么
postResult.resolve(5)?与论坛网站不同,我们不会在网站上使用“谢谢”或“感谢任何帮助”或签名。请参阅“'URL'这是一个简单的对象数组。抱歉@JohnSaunders不知道这一点。我们可以看看是什么定义了
URL
?为什么
postResult.resolve(5);
?与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“'URL”这是一个简单的对象数组。抱歉@JohnSaunders不知道这一点,我们可以看看是什么定义了
url
?为什么
postResult.resolve(5)?与论坛网站不同,我们不会在网站上使用“谢谢”或“感谢任何帮助”或签名。请参阅“'URL'这是一个简单的对象数组。抱歉@JohnSaunders不知道这一点。我们可以看看是什么定义了
URL
?为什么
postResult.resolve(5);
?与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“'URL”这是一个简单的对象数组。抱歉@JohnSaunders不知道这一点