Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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 序列化函数调用_Javascript_Jquery - Fatal编程技术网

Javascript 序列化函数调用

Javascript 序列化函数调用,javascript,jquery,Javascript,Jquery,我有一个javaScript对象,它有一些值。我需要调用函数的次数与对象具有值的次数相同。请看代码snipet for(var i=0; i < scroll["altscroll"]; i++){ more_alt_leftajaxsearchcategory(0, 0, element=false, back = true); } for(变量i=0;i

我有一个javaScript对象,它有一些值。我需要调用函数的次数与对象具有值的次数相同。请看代码snipet

for(var i=0; i < scroll["altscroll"]; i++){
    more_alt_leftajaxsearchcategory(0, 0, element=false, back = true);
}
for(变量i=0;i
被调用的函数通过ajax方法加载一些元素并将其附加到主体中。 问题是,当循环执行时,函数被即时调用,但被调用函数返回的结果不符合预期顺序。例如,如果函数被调用了3次,并且上次调用中返回的结果的大小较小,那么它将首先在主体中追加,然后追加另一个返回的结果。 我们是否可以序列化函数调用,使它在第一个函数完成之前不会调用另一个函数。 被调用的函数代码snipet:

var pageCount = 1;  
function more_leftajaxsearchcategory(locval,pageid, element, back){

    var offsetCount = pageCount * 10;
      var dataString = jQuery("#leftformid").serialize();   
      jQuery.ajax({
        url:"<?php echo admin_url('admin-ajax.php'); ?>",
        type:'POST',
        data: 'action=leftmenusearchcategory'+'&locationval='+locval+'&numb='+offsetCount+'&'+dataString,           
        beforeSend: function(){jQuery('body').append('<p class="overBck"><img alt="Loading..." src="<?php bloginfo('template_url'); ?>/images/ajax-loader.gif" style="margin-top:25%;"></p>'); },
        success:function(results, status)
        {       
                jQuery(".book_results").append(results);
                if(results == 'Sorry no results found. Please search again.'){
                    jQuery('.sidebar_loadMore').hide();
                    pageCount =1;
                }
                jQuery('.overBck').remove();
                 short_deals_attr();

        }

      });
    pageCount++;
}
var pageCount=1;
函数more\u leftajaxsearchcategory(locval、pageid、element、back){
var offsetCount=pageCount*10;
var dataString=jQuery(“#leftformid”).serialize();
jQuery.ajax({
url:“”,
类型:'POST',
数据:'action=leftmenusearchcontegory'+'&locationval='+locval+'&numb='+offsetCount+'&'+dataString,
beforeSend:function(){jQuery('body').append('

/images/ajax loader.gif“style=”margin top:25%;“>

”);), 成功:功能(结果、状态) { jQuery(“.book_results”)。追加(results); 如果(results==“对不起,找不到结果。请重新搜索”。){ jQuery('.sidebar_loadMore').hide(); 页面计数=1; } jQuery('.overback').remove(); short_deals_attr(); } }); pageCount++; }

我已经删除了不必要的代码。您还可以查看live站点

您必须添加附加参数以传入回调,该回调将在ajax完成其工作时调用,然后您可以实现类似的功能

我会使用随机长度的setTimeout来冒充ajax调用:

var inserial=函数(次){
var计数=0;
函数延迟(){
var cur=计数;
变量长度=数学楼层((数学随机()*7)+1)*500;
$('').text('#'+cur+'将以'+length'完成)。appendTo($('body');
setTimeout(函数(){
//成功中的不幸。
$('').text('#'+cur+'Done')。appendTo($('body');
//然后调用它来启动下一个ajax加载。
完成();
},长度);
计数++;
}
函数完成(){
如果(计数==次){
$('').text('All done').appendTo($('body');
返回;
}
延迟();
}
//您的函数,它接受回调函数。
延迟();
};
插入序号(5);

在本例中,我发现序列化函数调用的最佳方法是对前一个函数调用的成功进行递归调用

more_alt_leftajaxsearchcategory(0, 0, element=false, back = true, scroll["altscroll"] -1);
并通过

 if(back && loadtimes > 0){
    more_alt_leftajaxsearchcategory(0, 0, element=false, back = true, loadtimes-1 ); 
}
像这样

var pageCount = 1;  
function more_leftajaxsearchcategory(locval,pageid, element, back, times){
var offsetCount = pageCount * 10;
  var dataString = jQuery("#leftformid").serialize();   
  jQuery.ajax({
    url:"<?php echo admin_url('admin-ajax.php'); ?>",
    type:'POST',
    data: 'action=leftmenusearchcategory'+'&locationval='+locval+'&numb='+offsetCount+'&'+dataString,           
    beforeSend: function(){jQuery('body').append('<p class="overBck"><img alt="Loading..." src="<?php bloginfo('template_url'); ?>/images/ajax-loader.gif" style="margin-top:25%;"></p>'); },
    success:function(results, status)
    {       
            jQuery(".book_results").append(results);
            if(results == 'Sorry no results found. Please search again.'){
                jQuery('.sidebar_loadMore').hide();
                pageCount =1;
            }

            if(back && loadtimes > 0){
                more_alt_leftajaxsearchcategory(0, 0, element=false, back = true, loadtimes-1 ); 
            }

            jQuery('.overBck').remove();
             short_deals_attr();

    }

  });
pageCount++;
}
var pageCount=1;
函数more\u leftajaxsearchcategory(locval、pageid、element、back、times){
var offsetCount=pageCount*10;
var dataString=jQuery(“#leftformid”).serialize();
jQuery.ajax({
url:“”,
类型:'POST',
数据:'action=leftmenusearchcontegory'+'&locationval='+locval+'&numb='+offsetCount+'&'+dataString,
beforeSend:function(){jQuery('body').append('

/images/ajax loader.gif“style=”margin top:25%;“>

”);), 成功:功能(结果、状态) { jQuery(“.book_results”)。追加(results); 如果(results==“对不起,找不到结果。请重新搜索”。){ jQuery('.sidebar_loadMore').hide(); 页面计数=1; } 如果(返回和加载时间>0){ more_alt_leftajaxsearchcategory(0,0,element=false,back=true,loadtimes-1); } jQuery('.overback').remove(); short_deals_attr(); } }); pageCount++; }

在这种方法中,函数
more\u leftajaxsearchcategory
不会在不考虑前一次调用响应的情况下立即调用。只有在第一个函数得到响应时才会调用该函数。

为了帮助您对Ajax调用进行排序,您必须向我们展示进行Ajax调用的代码,因为仅使用所包含的代码无法解决问题。Ajax调用本身的处理需要修改。