2011-12-21 62 views
2

是否可以將多個ajax函數綁定到ajax成功調用?將多個函數綁定到ajax成功調用

舉例來說,我有格蘭下面的代碼:

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

loadDeals功能=

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的星功能=

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觸發內成功通話正常,然而,由於它是一個實時的API調用yelp,它需要幾秒鐘才能獲得fu所有的內容在頁面上加載,幾秒鐘後,yelp響應進來。我試圖弄清楚如何讓我的裝載器顯示,直到一切都恢復成功。
在此先感謝!

+0

@Jasper,LoadDeals功能=不是代碼的一部分,我只是分離2. – Mike 2011-12-21 20:11:07

回答

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

我已經更新了代碼以顯示狗吠聲功能,插入回調();起初給了我一個錯誤,說回調不是一個定義的函數,現在它根本不處理它。我用錯了嗎? – Mike 2011-12-21 21:04:29

+0

您是否從loadDeals函數更新了成功回調?每次使用showYelpStars或JS時都會產生回調函數(或者在運行之前檢查是否有回調函數)。你在做什麼基本上是使用一個函數作爲showYelpStars函數的參數。 – VNO 2011-12-21 21:06:22

+0

另外,您需要在Yelp的$ .load函數中使用成功回調,請參閱jQuery文檔。 – VNO 2011-12-21 21:09:39

2

我相信你可以使用.ajaxSuccess(function() {})添加多種功能,或者你可以調用多個一個匿名函數中的函數:

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

.ajaxSuccess()http://api.jquery.com/ajaxSuccess/

UPDATE

在一般意義上,如果你想顯示加載信息,而一個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()或者你應該改變選擇器來選擇實際上可以是多個元素的東西。

+0

showYelpStars();是成功的一部分,但在返回結果之前加載頁面。 – Mike 2011-12-21 20:12:41

+0

@Mike我想我現在得到你。一旦'showYelpStars()'中的AJAX請求完成,您只想隱藏加載器。那麼只需在'showYelpStarts()'中爲AJAX調用使用回調函數來隱藏加載器。 – Jasper 2011-12-21 20:20:10

+0

另一種方法是同時執行兩個AJAX請求,然後在加載器解析時隱藏加載器。這可以通過使用'$ .when()。then();' – Jasper 2011-12-21 20:21:17

0

是的,你可以聲明變量並將多個函數綁定到ajax成功。

$.ajax({ 
    type: "GET", 
    contentType: "text/plain", 
    datatype : "text/", 

    url:csvURL, 
    async: true, 

    success: function (data) { 
     var csvData = $.csv.toObjects(data); 
     var processInfocsvData = $.csv.toObjects(data); 
     PlotGraph(csvData); 
     PlotProcessInfoGraph(PlotProcessInfoGraph); 

    }, 
    error: function (result) {} 
});