2012-10-29 81 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' - 因为它正在使用包装功能。 :-) –