反向工程使用Ext.Ajax.request的跨域POST请求

时间:2011-09-29 14:20:51

标签: ajax cross-domain extjs3

我正在使用一个似乎使用Ext.Ajax.request(使用ExtJS 3)发送跨域请求的脚本 - 其中一些是POST请求。正在考虑摆脱ExtJS3(一般可能远离ExtJS),但使用XMLHttpRequest的快速尝试不起作用;如何找出用于发送这些跨域请求的技术?

4 个答案:

答案 0 :(得分:3)

我目前正在使用ExtJS 3.3.1,我还没有切换到4,但很可能在新项目出现时。在不查看Ext源代码的情况下,我可以告诉您他们正在使用JSONP来完成此任务,这是进行跨域AJAX调用的唯一方法,因为JavaScript必须遵守same-origin policy。< / p>

您是否尝试执行JSONP的纯JS实现?或者您已经在使用JS库了吗?

修改

根据我们的评论......他们正在发出POST请求。 JSONP无法做到这一点。据我所知,他们正在使用iframe类似的技巧。这与旧版浏览器上“AJAX”上传文件的技巧相同。

This链接更详细地解释了它。

此外,Valum's file uploader中使用了相同的方法(iframe,POST,上传文件)。然后更容易遵循ExtJS源。

答案 1 :(得分:0)

Ext JS 3.4 online documentation将为您提供Ext.Ajax类继承模型,该模型可用于跟踪与Ext.Ajax.request方法调用相关的源代码。但是,我建议不要花费更多时间和资源重新创建轮子,而是建议通过Ext.data.ScriptTagProxy配置选项将原生Ext JS proxy类实现到预先存在的商店中,以方便您的交叉-domain请求远程存储。以下是我所指的缩写示例。

示例

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']
});

<强> ADDITION

因为您打算不再使用Ext JS,请查看ACD (AJAX Cross Domain)库。

答案 2 :(得分:0)

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。

答案 3 :(得分:-2)

您可以尝试使用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']);