序列化函数调用

行星黑客

我有一个具有某些价值的javaScript对象。我需要调用一个函数的次数与该对象具有该值的次数相同。看一下代码片段

for(var i=0; i < scroll["altscroll"]; i++){
    more_alt_leftajaxsearchcategory(0, 0, element=false, back = true);
}

被调用的函数通过ajax方法加载某些元素并将其附加到主体。问题在于,当循环执行时,该函数即刻被调用,但是被调用函数返回的结果却不符合预期的顺序。例如,如果函数被调用3次,并且最后一次调用的返回结果的大小较小,则在附加其他返回结果之后,它将首先附加在主体中。我们可以序列化函数调用,以便在第一个函数完成之前不调用另一个函数。调用的功能代码片段:

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++;
}

我删除了不必要的代码。您也可以在现场观看Bestofthebrunch网站

行星黑客

在这种情况下,我发现序列化函数调用的最佳方法是在前一个函数成功的情况下进行递归调用。

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

并在Ajax成功后更新了被调用的函数

 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++;
}

在这种方法中,more_leftajaxsearchcategory如果不关心前一个调用的响应,就不会立即调用该函数仅当第一个得到响应时才调用该函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章