Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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 Ajax-如何等待php完成?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Ajax-如何等待php完成?

Javascript Ajax-如何等待php完成?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我完全不懂Ajax,所以如果这是一段非常愚蠢的代码,请原谅我: for (var i=0; i<11; i++) { jQuery('#position').html(i); var offset = jQuery('#offset').html(); var postcall = 'controller.php?url='+encodeURIComponent(scrapurl)+'&scrape_absolute='+absoluteep+'&s

我完全不懂Ajax,所以如果这是一段非常愚蠢的代码,请原谅我:

for (var i=0; i<11; i++) {
    jQuery('#position').html(i);
    var offset = jQuery('#offset').html();
    var postcall = 'controller.php?url='+encodeURIComponent(scrapurl)+'&scrape_absolute='+absoluteep+'&scrape_season='+season+'&scrape_show='+showslug+'&scrape_defimg='+encodeURIComponent(defaultimg)+'&offset='+offset;
    jQuery.post(postcall,function(data){
    jQuery('#offset').html(data);
    });
  }

for(var i=0;i关键是在回调函数内部进行下一次AJAX调用。这样,在第一次调用完成之前,您的下一篇文章不会出现。在您的代码中,因为
.post()
是非阻塞(异步)的,它立即继续循环,增加
i
/
#position
并触发下一个
.post()

要解决此问题,请将您的
.post()
封装在包装函数中。使用一个计数器跟踪它被调用的次数。从
.post()
的回调调用该函数,您将得到一个递归函数,该函数将按顺序执行调用:

var position=0;

function doNextAJAXPost() {
    if(position < 11) {
        jQuery('#position').html(position);
        position++;
        var offset = jQuery('#offset').html();

        jQuery.post('controller.php?url='+encodeURIComponent(scrapurl)+'&scrape_absolute='+absoluteep+'&scrape_season='+season+'&scrape_show='+showslug+'&scrape_defimg='+encodeURIComponent(defaultimg)+'&offset='+offset, function(data){
            jQuery('#offset').html(data);
            doNextAJAXPost();
        });
    }
}

doNextAJAXPost();
var位置=0;
函数doNextAJAXPost(){
如果(位置<11){
jQuery('#position').html(position);
位置++;
var offset=jQuery('#offset').html();
jQuery.post('controller.php?url='+encodeURIComponent(scrapurl)+'&scrape_absolutep='+absolutep+'&scrape_seasure='+seasure+'&scrape_show='+showslaug+'&scrape_defimg='+encodeURIComponent(defaultimg)+'&offset='+offset,函数(数据){
jQuery('#offset').html(数据);
doNextAJAXPost();
});
}
}
doNextAJAXPost();

使用自动执行的递归函数

(function callself(i) {
  jQuery('#position').html(i);
  var offset = jQuery('#offset').html();
  var postcall = 'controller.php?url='+encodeURIComponent(scrapurl)+'&scrape_absolute='+absoluteep+'&scrape_season='+season+'&scrape_show='+showslug+'&scrape_defimg='+encodeURIComponent(defaultimg)+'&offset='+offset;
  jQuery.post(postcall,function(data){
    jQuery('#offset').html(data);
    i++;
    if ( i < 11 ) callself(i);
  });
})(0)
(函数callself(i){
jQuery('#position').html(i);
var offset=jQuery('#offset').html();
var postcall='controller.php?url='+encodeURIComponent(scrapurl)+'&scrape_absolutep='+absolutep+'&scrape_seasure='+seasure+'&scrape_show='+showslaug+'&scrape_defimg='+encodeURIComponent(defaultimg)+'&offset='+offset;
jQuery.post(后调用,函数(数据){
jQuery('#offset').html(数据);
i++;
如果(i<11)调用自身(i);
});
})(0)

您可以在回调中进行下一次调用,但有几个选项。我建议在
post
调用之外构建URL,并使用缩进来帮助保持可读性。您能解释得更好吗?啊,我原则上理解,但示例代码只循环一次。如果它只循环一次,那么ld表示post调用本身在第一次或第二次迭代中都没有成功(取决于#offset是否用数据更新)。我尝试将controller.php更改为只回显一个值,但没有得到任何结果。嗯。您可以直接访问php吗?下面是一个JSFIDLE,它可以工作:它使用,
.ajax()
,其中的
.post()
只是一个包装器,但原理是一样的。嗨,我的php以echo$offset结尾,但ajax似乎没有收到它。