锁定老帖子 主题:求XmlHttp 跨域的解决方案
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-29
叶子 写道 json也不太爽
一个设想:flash加载其他域下的东西方便不? json哪里不爽?可以给个解释吗? 看到在js2的提案中已经有了jsonRequest,很好用的 |
|
返回顶楼 | |
发表时间:2006-12-30
完美的办法,不破坏XHR的限制,
在服务器做个代理功能就可以了,不直接用XHR发送跨域请求。 |
|
返回顶楼 | |
发表时间:2006-12-30
完美的办法,不破坏XHR的限制,
在服务器做个代理功能就可以了,不直接用XHR发送跨域请求。 |
|
返回顶楼 | |
发表时间:2007-01-11
PHPRPC 支持跨域调用,但不是用 xmlhttp 实现的,而是通过动态添加 js 脚本机制实现的。不过使用 PHPRPC 时不必在乎用的是什么方式,他会根据是否跨域来自动选择使用 xmlhttp 还是动态 js。
|
|
返回顶楼 | |
发表时间:2007-03-28
yahoo有这个跨域代理
自己去搞一个咯 php的 我自己用servlet 如果你服务器不想装php就用servlet好了 |
|
返回顶楼 | |
发表时间:2007-04-23
不是很明白!
有没有人可以给个实际的例子实际演示说明的? dlee大师的附件下载过来,JS有错误,跑不起来。实在奇怪! 正好碰到类似的问题,比较急。 高手们请再指点一下。 |
|
返回顶楼 | |
发表时间:2007-04-23
解决浏览器的跨域问题,不要想完全通过在浏览器中使用脚本绕过浏览器的相同来源策略,那是做不到的,除非你所使用的浏览器版本刚好存在严重的bug,否则做浏览器的那帮人都不必混了。
解决跨域问题,要从浏览器之外想办法,据我所知有两种方法: 方法1:在服务器端实现一个服务器端的代理,接收跨域的请求,通过HTTP得到请求的数据后转发给客户端的浏览器。 但是你在客户端也要做一些事情,因为XMLHttpRequest对象默认情况下是不接受发到其他域的URL的。方法是使用Decorator模式给XMLHttpRequest加上一层封装,将发到其他域的URL改写为发给服务器端代理的URL。 《Ajax模式与最佳实践》最后一章:“基于REST的MVC模式”给出了一种非常详细的解决方案,这种方案也是属于方法1的。 方法2:在客户端实现一个客户端的HTTP代理,配置浏览器使用这个HTTP代理。通过HTTP代理请求跨域的数据(通过一个绑定在本域的特殊的URL,例如:/selenium-server/RemoteRunner.html?sessionId=260113)这是在Selenium RC中所使用的方式。他们为了绕过浏览器的相同来源策略,以便可以对于任意的Web网站执行客户端的自动测试,使用了一个Java实现的客户端的HTTP代理。 详情请看Selenium RC的文档: http://www.openqa.org/selenium-rc/tutorial.html 在方法2中,同样要使用Decorator模式给XMLHttpRequest加上一层封装,将发到其他域的URL改写为能够触发客户端代理相应操作的URL。 有人会争论说,通过动态加载脚本(就是动态创建<script>元素)的方式可以实现跨域,那不是真正的跨域,因为数据的交互是单向的。那样你最多只能调用其他域的功能,你取回的数据还是无法与本域的数据(HTML DOM树)进行交互。 很抱歉我没有提供现成可用的代码,我其实不是很喜欢有些同学什么都等别人给一个现成的答案的态度。 |
|
返回顶楼 | |
发表时间:2007-04-24
我见过总结的最全的一篇文章.
http://www-128.ibm.com/developerworks/library/x-securemashups/ |
|
返回顶楼 | |
发表时间:2007-04-25
参考一下Ext的Ext.data.ScriptTagProxy, 用动态创建<script>标签的方式实现跨域的访问.
|
|
返回顶楼 | |
发表时间:2007-04-25
fcoffee 写道 参考一下Ext的Ext.data.ScriptTagProxy, 用动态创建<script>标签的方式实现跨域的访问.
不好意思,我完全不了解Ext,貌似你很了解。我希望你能解答我以下的问题,我们也可以借此来做一些更深入的讨论。 按照我对于浏览器端JavaScript的了解,我的判断是这样的: Ext.data.ScriptTagProxy有一个限制条件,那就是服务器端返回的数据的格式应该是一段JavaScript或者JSON格式的数据,这样在evaluate之后,才能创建一些能够与本域交互(就是与本域的JavaScript对象和HTML DOM树交互)的数据。 这其实是一个很大的限制,这意味着通过Ext.data.ScriptTagProxy仍然无法获取任意的数据。你要想获取来自本域之外某个服务器的数据,必需那个服务器将这些数据开放为JSON格式,暴露出这样的Web服务,这样你才能够获取到。 你如果不相信,可以自己去看一下这个例子: http://photos.mclanahan.net/jquery/jquery-svn/trunk/plugins/ext/examples/grid/paging.js 并且看一下这个例子所请求的数据的格式: http://www.yui-ext.com/forum2/topics-remote.php 先学好JavaScript,再去学好Ext,好吗? |
|
返回顶楼 | |