[英]Reverse engeering cross domain POST requests which use Ext.Ajax.request
我正在使用一個似乎使用Ext.Ajax.request
(使用ExtJS 3)發送跨域請求的腳本 - 其中一些是POST請求。 正在考慮擺脫ExtJS3(可能總體上遠離ExtJS)但是使用XMLHttpRequest
的快速嘗試不起作用; 如何找出用於發送這些跨域請求的技術?
我目前正在使用ExtJS 3.3.1,我還沒有切換到4,但很可能在新項目出現時。 在不查看Ext源代碼的情況下,我可以告訴您他們正在使用JSONP來完成此任務,這是進行跨域AJAX調用的唯一方法,因為JavaScript必須遵守同源策略 。
您是否嘗試執行JSONP的純JS實現? 或者您已經在使用JS庫了嗎?
編輯
根據我們的評論...他們正在發出POST請求。 JSONP無法做到這一點。 所以據我所知,他們正在使用類似的iframe
技巧。 這與舊版瀏覽器上“AJAX”上傳文件的技巧相同。
此鏈接更詳細地解釋了它。
此外,在Valum的文件上傳器中使用相同的方法(iframe,POST,上傳文件)。 然后更容易遵循ExtJS源。
Ext JS 3.4在線文檔將為您提供Ext.Ajax
類繼承模型,該模型可用於跟蹤與Ext.Ajax.request
方法調用相關的源代碼。 但是,我建議不要花費更多時間和資源來重新創建輪子,而是建議通過proxy
配置選項Ext.data.ScriptTagProxy
生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)庫。
JSONP有點像黑客,但可用。
但是,如果您控制正在跨越的域,請考慮使用CORS。 CORS涉及在網站的響應中放置一個標題(Access-Control-Allow-Origin): 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。
您可以嘗試使用jsonp Jquery示例:
$.ajax({
url: "test.php",
dataType: "jsonp"
success: function(data){
console.log(data)
}
});
或者,如果您可以訪問所請求的內容,則可以設置Access-Control-Allow-Origin標頭。 PHP示例:
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.