我正在使用一个脚本,似乎使用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库,它提供了跨域支持。如果您是在编写本土解决方案时设置的,您可以使用库本身或源代码作为参考。 –