2016-04-26 60 views
3

我需要第二个jQuery实例,或者至少是它的AJAX工具。 问题是我需要联系两台服务器,他们使用不同的身份验证方法。如何创建jquery对象的第二个实例?

因此,在一个情况下,我需要设置一个标题:

$.ajaxSetup({ 
    headers: { 
     'Authorization': auth_string 
    } 
}); 
在另一种情况下

不能及的。如果我发送标题,请求将失败。

由于我需要始终从两台服务器获取数据,因此我不希望在每次AJAX调用之前操作标头。所以最好使用两个不同的AJAX/jQuery对象。

我该如何做到这一点?

+1

我不知道你做了'VAR jq2 = jQuery.extend会发生什么(真,{},​​jQuery);',如[这个答案]的启发(http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-an-object) – Utkanos

+0

为什么不使用ajax调用的url参数? – Nadir

+0

@Utkanos:如果我尝试使用它,它会说:“它不是一个对象”。 @Nadir:你是什么意思? – helle

回答

3

你就应该能够使两个独立设置的对象,像这样:

var serverSettings1 = { headers: { 'Authorization': auth_string1 } }

var serverSettings2 = { \\ no headers here }

再经过他们时,你的Ajax调用中:
$.ajax(serverSettings1);$.ajax(url, serverSettings2);
设置对象也可以保存请求类型,网址等。

(来自http://api.jquery.com/jquery.ajax/

1

以下我的评论:我建议不要使用全局配置,并使用两个按需使用的ajax选项对象。

有了一些分解则可能是:

var optionsServerA = { 
    headers: { 
    'Authorization': auth_string 
    } 
}; 

var optionsServerB = {}; 


// request on server A 
$.ajax(
    $.extend({ 
    url: 'http://servera', 
    data: {} 
    }, optionsServerA) 
) 
    .then(...); 

// request on server B 
$.ajax(
    $.extend({ 
    url: 'http://serverb', 
    data: {} 
    }, optionsServerB) 
) 
    .then(...); 

而且你可以创建包装以防万一“Ajax”的可读性更好

+0

我现在正在使用类似的解决方案。我会说更灵活。 我有一个对象,它处理我的ajax调用,这有一个属性'headers',可以设置类似于我以前的功能。当我做ajax调用时,我使用:'.ajax({url:...,data:...,headers:self.headers,...})'while self('var self = this; ')在我的方法中包含对象。仍然...我在等待一个答案如何创建第二个实例有些日子。 – helle

相关问题