儘管通過直接使用$.ajax
來避免此問題顯然更好,但您可以爲$.ajax
方法創建代理方法。這有助於$.load
調用$.ajax
以及一組默認參數。因此,我們可以攔截$.load
的電話$.ajax
。
var org = $.ajax;
$.ajax = function(settings){
settings['accepts'] = null;
settings['beforeSend'] = function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
}
org(settings);
}
$("#foo").load("http://fiddle.jshell.net/FpCBJ/show/light/");
Try
顯然,這將影響所有的呼叫,$.ajax
,所以你可能要到另一個參數添加到可調用時設置,並在代理檢查,以避免設置requestheader代理方法直。甚至在設置。
我想你也可以爲每個調用添加/刪除代理,但是這會增加開銷並可能導致競爭條件(?)(如果您在請求後直接刪除代理,則不會這麼想)等待回調),所以你需要某種鎖。
編輯:增加settings['accepts'] = null;
以保持$.ajax
在回調之前添加任何標題,因爲setRequestHeader()
只添加,不能替換。男孩這是骯髒的。
編輯2:其實,一個也許更清潔的選擇是建立自己的接受,並指他們允許$.ajax
做的工作全部由自己的數據類型,並設定XHR地圖:
var org = $.ajax;
$.ajax = function(settings){
settings['accepts'] = {"myDataType" : "text/javascript"};
settings['dataType'] = "myDataType";
org(settings);
}
$("#foo").load("http://fiddle.jshell.net/FpCBJ/show/light/");
你在哪裏使用'.load()'獲取javascript?這是爲了獲得內容,所以你可能會更好地使用不同的方法。 – 2010-09-27 20:22:14
$ .ajax更好的方法 – 2010-09-27 20:44:11
Actualy它的colorbox正在加載,我寧可不改變它的代碼,除非沒有其他方式做它。這是未壓縮的jquery-colorbox.js第650行的片段http://gist.github.com/599891 – mdrozdziel 2010-09-27 21:30:05