2016-04-26 26 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

相關問題