预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

js跨域访问问题解决方法 什么引起了ajax不能跨域请求的问题? ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。 有什么完美的解决方案么? 解决方案有不少,但是只能是根据自己的实际情况来选择。 跨域的安全限制都是指浏览器端来说的,服务器端是不存在跨域安全限制的。所以针对这2种情况衍生出2类跨域解决方案,一类是服务器端做中转类似代理方式,一类是js处理浏览器端的真正跨域访问。 具体情况有: 本域和子域的相互访问:www.aa.com和book.aa.com用document.domain="aa.com"; 本域和其他域的相互访问:www.aa.com和www.bb.com用XMLHttpRequest访问代理,既服务器端代理方式 本域和其他域的相互访问:www.aa.com和www.bb.com用JS创建动态脚本,<script>标签的src属性实现跨域访问 解决方法: 如果想做到数据的交互,那么www.aa.com和book.aa.com必须由你来开发才可以。可以将book.aa.com用iframe添加到www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain="aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的JS就可以了。 这种情形是最经常遇到的,也是用的最多的了。就是www.aa.com和www.bb.com你只能修改一个,也就是另外一个是别人的,人家告诉你你要取得数据就访问某某连接参数是什么样子的,最后返回数据是什么格式的。而你需要做的就是让你的服务器端充当中转代理,让服务器去别人的网站上取得数据,再返回给浏览器端。 服务器端充当中转代理方式有很多可以由服务器端程序实现,也可以修改服务器配置实现,下面举例Apache重写(mod_rewriteproxy模式)方式: 在Apache的安装目录下的conf/httpd.conf文件添加如下语句: LoadModuleproxy_modulemodules/mod_proxy.so LoadModuleproxy_http_modulemodules/mod_proxy_http.so LoadModulerewrite_modulemodules/mod_rewrite.so RewriteEngineOn RewriteRule^/_proxy/(.*)$http://$1[P,L] 这样就可以把其他网站的url映射为本服务器的/_proxy/目录下面,例如可以这么访问百度HYPERLINK"http://html.quqn.com/_proxy/www.baidu.com"http://html.quqn.com/_proxy/www.baidu.com 这个的区别就是请求是使用<script>标签来请求的,这个要求也是两个域都是由你来开发才行。原理就是JS文件注入,在本域内的aa.com内生成一个JS标签,它的SRC指向请求的另外一个域bb.com的某个页面b,b返回数据即可,可以直接返回JS的代码。因为script的src属性是可以跨域的。具体看代码,这个也比较简单。 aa.com/a.jsp页面代码如下: <scripttype="text/javascript"> functionmyTest(data){ alert(data); } </script> <scripttype="text/javascript"src="http://www.bb.com/index!getData.action?jsoncallback=myTest"></script> bb.com/b.jsp页面代码如下: $(param.jsoncallback)({"name":"ZhangHuihua","QQ":"350863780"}) b.jsp页面通过$(param.jsoncallback)得到浏览器端随后要回调的jsfunctionname:myTest 实际上客户端接收到的response如下:myTest({"name":"ZhangHuihua","QQ":"350863780"}) jQuery浏览器端跨域访问 目前jQuery$.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的。其原理就是上面第三种方式,<script>标签的src属性实现跨域访问 真实案例: 代码如下: $.ajax({ url:http://跨域的dns/index!searchJSONResult.action, type:"