2012-10-29 122 views
3

這可能很奇怪,但我在尋找的是如何將jQuery.ajaxSetup()的範圍限制在特定對象內。讓我舉一個例子,我有兩個對象obj_1obj_2。我想以這樣的方式編寫ajaxSetup,使得我在對象中的所有ajax調用將使用一組參數,並且我在第二個對象中的所有調用都將使用其他一組參數。將jQuery.ajaxSetup範圍限制在僅限特定對象內

var obj_1 = { 

    my_func : function(){ 

     $.ajax({ 
      success : function(){ 
       // do something 
       // all ajax calls in this object should use one set of params (type,dataType,headers etc) 
      } 
     }) 

    } 

}; 

var obj_2 = { 

    my_func : function(){ 

     $.ajax({ 
      success : function(){ 
       // do something 
       // all ajax calls in this object should use different params (type,dataType,headers etc) 
      } 
     }) 

    } 

}; 

我想這樣做,這樣我就不必寫所有PARAMS在每一個Ajax調用。

回答

3

最好的辦法是創建一個供對象使用的函數,並在進行ajax調用時設置參數。該對象使用該函數而不是直接調用ajax。例如,一個簡單的包裝功能。

或者,您可以在每個要重複使用的對象上擁有standardParams屬性,也許在調用的特定參數中混合。喜歡的東西:

var obj_x = { 
    standardParams: { 
     // These are the params that don't vary 
     dataType: "json" // Or whatever 
    }, 

    your_func: function() { 
     $.ajax($.extend({}, this.standardParams, { 
      // These are the params that vary 
      success: function() { ... } 
     })); 
    } 
}; 

(注意用jQuery.extend混合的每個呼叫和標準PARAMS)

或課程,你可以使用兩個(一個包裝函數,它使用的組合蓋下的standardParams財產)。

+0

+1但是,是不是有一種方法可以直接寫入$ .ajax而不傳遞任何內容?這個解決方案對我來說是完美的,但其他新手程序員可能會覺得很難維護。我想讓它儘可能簡單。 –

+0

@ atif089:使用包裝函數非常非常簡單;新手編碼人員不應該有任何麻煩。但是,不,「ajaxSetup」對於整個jQuery來說是全局的。如果它有一種機制讓你以非全局的方式來做這件事,那麼最可能的情況就是它會返回一個函數引用,並且你會使用該引用來調用,而不是直接使用'ajax' - 因爲它正在使用包裝功能。 :-) –