将多个函数绑定到ajax成功调用

时间:2011-12-21 20:07:45

标签: jquery ajax callback

是否可以将多个ajax函数绑定到ajax成功调用?

例如,我有以下代码:

$('#deals').each(function() {
        var city_slug = $(this).data('city');
        $(".dealloader").show();
            //load deals
            setTimeout(loadDeals, 3000);
}); 

loadDeals function =

  function loadDeals() {    
    var city_slug = $("#deals").data("city");
     //var position = $(this).position();   
         $.ajax({
           cache: false,
           type: "POST",
           url: "get_deals.php",
           data: {'city' : city_slug},
            success: function(html) {
              showYelpStars(function() {
                $('.dealloader').hide();
                $('#deals').append(html);
              });
            }
         }).done(function( msg ) {
           //        
    });

}

yelp Stars Function =

 function showYelpStars(callback){
 $('.yelpreviews').each(function() {
     var passurl = $(this).data('yelpurl');
     var passname = $(this).data('name');
     var passstreet = $(this).data('address');
     var passcity = $(this).data('city');
     var passstate = $(this).data('state');
     var passreview = $(this).data('yelp');
     if (passreview.val = '1' && passname !== ""){
     $(this).load('yelpreviews.php', {yelp: passreview, name : passname, address : passstreet, city : passcity, state : passstate} );
     }
    });
    callback();
  }

函数showYelpStars在成功调用中正确触发,但是,它是对yelp的实时API调用,需要几秒钟才能获得完整的结果,页面上的所有内容都被加载,几秒钟之后就会出现yelp响应进来。我正在试图弄清楚如何保持我的装载机显示,直到一切都恢复成功 提前谢谢!

2 个答案:

答案 0 :(得分:2)

我相信你可以使用.ajaxSuccess(function () {})添加多个函数,或者你可以在匿名函数中调用多个函数:

        success: function(html){
            run_function_one(html);
            run_function_two(html);
        }

.ajaxSuccess()的文档:http://api.jquery.com/ajaxSuccess/

<强>更新

一般来说,如果你想在进行AJAX调用时显示加载消息,有两种简单的方法可以做到:

$.ajax({
    beforeSend : function () {/*show loading message now*/},
    success    : function () {/*hide loading message now*/}
});

OR

/*show loading message now*/
$.ajax({
    success : function () {/*hide loading message now*/}
});

在旁注中,您正在按ID选择一个元素,该元素保证只返回一个结果,但您在该选择上调用.each()。您不需要.each(),或者您应该更改选择器以选择实际上可能是多个元素的内容。

答案 1 :(得分:1)

在showYelpStars函数中实现回调:

function showYelpStarts(callback) {
  //Your other code here that loads the Yelp stars
  callback();
}

然后在你成功的回调中:

success: function(html) {
  showYelpStars(function() {
    $('.dealloader').hide();
    $('#deals').append(html);
  });
}