2011-09-29 30 views

回答

-2

你可以嘗試使用JSONP jQuery的例子:

$.ajax({ 
    url: "test.php", 
    dataType: "jsonp" 
    success: function(data){ 
    console.log(data) 
    } 
}); 

或者如果你有機會到所請求的內容,您可以設置訪問控制允許來源頭。 PHP例如:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
0

Ext JS 3.4 online documentation的將提供可用於跟蹤源代碼中的類Ext.Ajax繼承模型關聯到Ext.Ajax.request方法調用。但是,我建議您不要花費更多的時間和資源來重新創建輪子,而是建議通過proxy配置選項將原生Ext JS Ext.data.ScriptTagProxy類實現到您的預先存儲的商店中,以促進您對遠程商店的跨域請求。以下是我所指的一個簡短例子。

var myJsonStore = new Ext.data.JsonStore 
({ 
    autoLoad : true, 
    proxy : new Ext.data.ScriptTagProxy 
    ({ 
     url : 'http://www.cross-domain.com/file.php' 
    }), 
    fields : ['myIdColumn','myCharColumn','myDateColumn'] 
}); 

加成

因爲你打算使用的Ext JS請檢出ACD (AJAX Cross Domain)庫移開。

+0

但我打算離開使用ExtJS ......這是否表明繼續使用ExtJS? –

+0

不一定。我試圖建議你從使用Ext JS 3.4在線文檔的角度回顧'Ext.Ajax'類繼承模型及其基礎'request'方法邏輯。通過開始並瞭解繼承層次結構,您應該能夠輕鬆遍歷樹,識別並查看超類方法和負責促成跨域請求的邏輯。我的例子可能被誤導了,但是打算暗示特定的'Ext.data.ScriptTagProxy'類,你可能會發現你正在尋找的東西。 –

+0

請檢查我添加的非常簡單和輕量級的JavaScript AJAX庫,它提供了跨域支持。如果您是在編寫本土解決方案時設置的,您可以使用庫本身或源代碼作爲參考。 –

3

我目前正在使用ExtJS 3.3.1,我還沒有將開關切換到4,但很可能會出現新的項目。如果不查看Ext源代碼,我可以告訴你他們正在使用JSONP來完成此任務,它是進行跨域AJAX調用的唯一方法,因爲JavaScript必須遵守same-origin policy

你是否想要做一個JSONP的純JS實現?或者你是否已經使用JS庫?

編輯

根據我們的意見......他們正在POST請求。這對於JSONP來說是不可能的。所以據我所知,他們使用iframe的詭計類似。這與在舊版瀏覽器上「AJAX」上傳文件的技巧是一樣的。

This鏈接更詳細地解釋它。

此外,在Valum's file uploader中使用了相同的方法(iframe,POST,上載文件)。遵循ExtJS源代碼要容易得多。

+0

但是你可以使用JSONP發送POST請求嗎?我正在觀看Firebug中的網絡活動,並且該頁面正在發送跨域POST請求 –

+0

現在,您對我有好奇......我假定JSONP只能發送GET請求。我要去挖掘。 –

+0

你和我都是男人! –

0

JSONP是一個黑客,但可用。

但是,如果您控制正在交叉的域,請考慮使用CORS。 CORS涉及在來自網站的響應中放置標題(訪問控制 - 允許來源):http://enable-cors.org/

它受IE 8+(帶有警告,natch),Firefox和WebKit瀏覽器的支持。IE警告是這樣的:IE爲CORS請求使用不同的請求對象(XDomainRequest)。如果您必須支持Opera,則需要使用JSONP或polyfill(類似https://github.com/gimite/web-socket-js/,這需要Flash)。

如果您不控制有問題的域名,可以嘗試讓他們支持CORS。