2012-10-19 102 views
1

我有.ajaxComplete事件有線多達這樣幾個要素:jQuery ajaxComplete:有沒有辦法告訴哪個Javascript函數執行ajax調用?

$("#ElementId").ajaxComplete(function (a, b, c) { });

的問題是,我有我的劇本多$.ajax調用由各種功能調用。我不希望爲每個Ajax調用的每個控件觸發.ajaxComplete事件。從概念上講,我期待這樣的事情:

if (a.function == SearchCustomers) { do this }

有什麼辦法達到我想要的嗎?

編輯:我意識到我可以檢查我打電話的服務的URL,但我不想在我的腳本中多次編寫一個URL字符串。

+2

呀,不使用'.ajaxComplete '全球,而不是每個呼叫附加一個完整的功能。 –

+0

...或者'成功'在$ .ajax而不是'complete'中。一致的命名將非常簡單! –

+0

你的情況很簡單,'success'屬性顯然是你應該使用的,但是如果你有一種情況需要'ajaxComplete'來完成你在問題中陳述的方式,請看看我的發佈。 – techfoobar

回答

3

你要做這樣說:

$.ajax({ 
    url: "servicecall.html", 
    success: function(html){ 
     //if success 
    }; 
}); 
+0

我的大腦被炸了。我已經在使用成功了,somwehow並沒有想到在我成功使用的那個函數結束時打電話給我的其他功能。謝謝! – oscilatingcretin

2

個人而言,我喜歡在JS對象組織我的模塊不是抽象我的Ajax調用到功能由於種種原因:

​var YourModule = { 
    Ajax: {   
     AjaxCallOne: function() 
     { 
      return $.ajax({ 
       // your options for the call  
      }).promise(); 
     }, 
     AjaxCallTwo: function() 
     { 
      return $.ajax({ 
       // your options for the call  
      }).promise(); 
     } 
    }, 
    Events: { 
     OnButtonOneClick: function() 
     { 
      YourModule.Ajax.AjaxCallOne().then(YourModule.Events.OnAjaxCallOneReceived); 
     }, 
     OnButtonOneClick: function() 
     { 
      YourModule.Ajax.AjaxCallTwo().then(YourModule.Events.OnAjaxCallTwoReceived); 
     }, 
     OnAjaxCallOneReceived:function(data) 
     { 
      // your code    
     }, 
     OnAjaxCallTwoReceived: function(data) 
     { 
      // your code  
     } 
    }    
};​​​ 

。那麼()正在工作,因爲$ .ajax實現了延遲「接口」。請參閱此參考: http://api.jquery.com/category/deferred-object/

此外,請考慮讓代碼用戶能夠更改傳遞到$ .ajax調用中的選項。爲此,我使用$ .extend。看到這個參考: http://api.jquery.com/jQuery.extend/

1

Ajax調用一個:

$.ajax({ 
    // set all your properties as needed 
    url: myUrl, 
    success: function(data) { 
     // handle the result from THIS .ajax call 
    } 
}); 

的Ajax調用兩個:

$.ajax({ 
    // set all your properties as needed 
    url: myotherURL, 
    success: function(data) { 
     // handle the result from THIS .ajax call 
    } 
}); 

如果你有很多需要做同樣的事情。阿賈克斯的電話,然後您可以使用$ .ajaxSetup設置默認成功功能

7

更新

檢查這個演示:http://jsfiddle.net/Z6Z5e/4/


您可以在.ajax()調用指定的自定義屬性的功能標識,並使用該值在ajaxComplete()回調。

例如,添加'func'特性,同時使您的通話.ajax()

function foo() { 
    $.ajax({ 
     url: '/someurl', 
     ... 
     func: 'foo', 
     ... 
    }); 
} 

,然後使用該值從ajaxComplete()

$('#someElement').ajaxComplete(function(e, xhr, settings) { 
    if (settings.func == 'foo') { 
     // ... 
    } 
    else if (settings.func == 'bar') { 
     // ... 
    } 
}); 
相關問題