簡體   English   中英

反向使用Ext.Ajax.request進行跨域POST請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM