2014-03-05 122 views
2

我正在使用jQuery:這是最好的方式來存儲基地址值的AJAX請求,在每種腳本可以以某種方式參考它的方式沒有手動更改每個更新?我應該將它存儲在窗口對象,html,全局變量還是什麼?提前謝謝了。設置全球基地址

+0

我將其存儲在一個全局變量。 – putvande

回答

4

您可以創建功能來自動執行:

var BASE_URL = 'http://www.foo.com/url-root/'; 

function getUrl(url) { 
    return BASE_URL.concat(url); 
} 

現在,whenervar你想有一個網址...

var url = getUrl('bar.php'); //returns 'http://www.foo.com/url-root/bar.php' 

我你不希望它是全球...

(function() { 
    var BASE_URL = 'http://www.foo.com/url-root/'; 

    window.getUrl = function(url) { 
     return BASE_URL.concat(url); 
    } 
})(); 

或者你可以創建一個對象。

+2

或者你可以做'BASE_URL +'bar.php'嗎? – putvande

+0

好的,我會和它一起去的......我在哪裏讀到全局變種是邪惡的? =) – Jumpa

1

這會被認爲是危險的或一些壞的做法(請參閱下面的警告),但它可以讓你保持你的ajax調用清潔(沒有顯式的URL連接或方法調用)。

這是通過覆蓋$.ajax方法的默認行爲來實現的,以便在將呼叫傳遞給真正的$.ajax方法之前,在URL上添加我們自己的預處理。

這種方法具有相同的缺陷與使用$.ajaxSetup所以我會爲您提供從他們的文檔同樣的警告:

這裏指定的設置將影響到$阿賈克斯或 基於Ajax的衍生物,所有呼叫如$ .get()。這可能會導致不需要的行爲,因爲其他呼叫者(例如插件)可能會將 視爲正常的默認設置。爲此,我們強烈建議使用 來反對使用此API。相反,請在 調用中明確設置選項,或者定義一個簡單的插件來執行此操作。

Live Demo

function setBaseForAjax(base){ 
    var oa = $.ajax; //keep a reference to the actual ajax call 
    $.ajax = function(){ 
     var len = arguments.length, 
      newArgs = [], 
      newUrl = len === 2 && (typeof arguments[0]).toLowerCase() === 'string' ? arguments[0]: null, 
      newObj = len === 2 && (typeof arguments[1]).toLowerCase() === 'object' ? arguments[1] : (len === 1 && (typeof arguments[0]).toLowerCase() === 'object' ? arguments[0] : null); 

     if(newUrl){ 
      newUrl = base + newUrl; 
      newArgs.push(newUrl); 
     } 
     if(newObj){ 
      newObj.url = base + newObj.url; 
      newArgs.push(newObj);  
     } 
     oa.apply(window, newArgs); //call the real $.ajax method with the modified params 
    }; 
} 

setBaseForAjax('/echo/'); //set the base for every ajax call in the application. 

$.ajax({ 
    url:'json/', 
    success: function(){ 
     alert('in for json');  
    } 
}); 

$.ajax(
    'html/' 
    ,{ 
     success: function(){ 
      alert('in for html');  
     } 
    } 
); 

$.ajax('html/', { //html wins over settings. 
    url:'json/', 
    success: function(){ 
     alert('in for html');  
    } 
}); 

$.get('json/', function(){ 
    alert('in for json'); 
}); 
+0

哇,謝謝你的時間。我仔細閱讀了它,它似乎是一個更強大的解決方案。現在我必須決定... – Jumpa