我正在使用一個腳本,似乎使用Ext.Ajax.request
(與ExtJS 3)發送跨域請求 - 其中一些POST請求。正在考慮擺脫ExtJS3(可能會遠離ExtJS),但是快速嘗試使用XMLHttpRequest
不起作用;我如何才能找出用於發送這些跨域請求的技術?反向engeering使用Ext.Ajax.request的跨域POST請求
回答
你可以嘗試使用JSONP jQuery的例子:
$.ajax({
url: "test.php",
dataType: "jsonp"
success: function(data){
console.log(data)
}
});
或者如果你有機會到所請求的內容,您可以設置訪問控制允許來源頭。 PHP例如:
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
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)庫移開。
我目前正在使用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源代碼要容易得多。
但是你可以使用JSONP發送POST請求嗎?我正在觀看Firebug中的網絡活動,並且該頁面正在發送跨域POST請求 –
現在,您對我有好奇......我假定JSONP只能發送GET請求。我要去挖掘。 –
你和我都是男人! –
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。
- 1. GM_xmlhttpRequest POST請求不能跨域使用
- 2. jQuery和跨域POST請求
- 3. 跨域Ajax與Ext.Ajax.request
- 4. 用post方法發送跨域請求
- 5. 當jQuery.ajax發送GET時發送OPTIONS請求跨域的Ext.Ajax.request GET
- 6. 使用YQL跨域請求
- 7. 使用GWT跨域請求
- 8. 使用jQuery跨域請求
- 9. 跨域請求使用JSON
- 10. 跨域POST請求沒有工作
- 11. jquery post請求/響應跨域
- 12. 在Internet Explorer中跨域POST請求ajax
- 13. 跨域請求
- 14. 跨域請求
- 15. 跨域請求
- 16. 跨域請求
- 17. 跨域請求
- 18. 爲什麼我的跨域POST請求被OPTIONS請求預檢?
- 19. 使用PUT/POST/DELETE跨域請求的JSONP問題
- 20. 不使用代理的跨域POST Ajax請求
- 21. 不使用任何框架的跨域POST請求
- 22. GWT:如何使用JSON發送POST跨域請求
- 23. 使用jQuery的跨域OData請求ajax
- 24. 使用jQuery插件的跨域請求
- 25. 使用jsonp錯誤的跨域請求
- 26. 跨域請求jquery
- 27. Firefox跨域請求
- 28. 跨域Ajax請求
- 29. 跨域Ajax請求
- 30. 跨域OAuth請求
但我打算離開使用ExtJS ......這是否表明繼續使用ExtJS? –
不一定。我試圖建議你從使用Ext JS 3.4在線文檔的角度回顧'Ext.Ajax'類繼承模型及其基礎'request'方法邏輯。通過開始並瞭解繼承層次結構,您應該能夠輕鬆遍歷樹,識別並查看超類方法和負責促成跨域請求的邏輯。我的例子可能被誤導了,但是打算暗示特定的'Ext.data.ScriptTagProxy'類,你可能會發現你正在尋找的東西。 –
請檢查我添加的非常簡單和輕量級的JavaScript AJAX庫,它提供了跨域支持。如果您是在編寫本土解決方案時設置的,您可以使用庫本身或源代碼作爲參考。 –