- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
js跨域访问问题处理方法
js跨域访问问题解决方法什么引起了ajax不能跨域请求的问题?ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。有什么完美的解决方案么?解决方案有不少,但是只能是根据自己的实际情况来选择。跨域的安全限制都是指浏览器端来说的,服务器端是不存在跨域安全限制的。所以针对这2种情况衍生出2类跨域解决方案,一类是服务器端做中转类似代理方式,一类是js处理浏览器端的真正跨域访问。具体情况有: 本域和子域的相互访问: 和用document.domain = ;本域和其他域的相互访问: 和 用 XMLHttpRequest访问代理,既服务器端代理方式本域和其他域的相互访问: 和 用 JS创建动态脚本,script标签的src属性实现跨域访问解决方法:如果想做到数据的交互,那么和必须由你来开发才可以。可以将用iframe添加到 的某个页面下,在和iframe里面都加上document.domain = ,这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的JS就可以了。这种情形是最经常遇到的,也是用的最多的了。就是和你只能修改一个,也就是另外一个是别人的,人家告诉你你要取得数据就访问某某连接参数是什么样子的,最后返回数据是什么格式的。而你需要做的就是让你的服务器端充当中转代理,让服务器去别人的网站上取得数据,再返回给浏览器端。服务器端充当中转代理方式有很多可以由服务器端程序实现,也可以修改服务器配置实现,下面举例Apache重写(mod_rewrite proxy模式)方式:在Apache的安装目录下的conf/httpd.conf文件添加如下语句:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule rewrite_module modules/mod_rewrite.soRewriteEngine OnRewriteRule ^/_proxy/(.*)$ http://$1 [P,L]这样就可以把其他网站的url映射为本服务器的/_proxy/目录下面, 例如可以这么访问百度/_proxy/这个的区别就是请求是使用script标签来请求的,这个要求也是两个域都是由你来开发才行。原理就是JS文件注入,在本域内的内生成一个JS标签,它的SRC指向请求的另外一个域的某个页面b,b返回数据即可,可以直接返回JS的代码。因为script的src属性是可以跨域的。具体看代码,这个也比较简单。/a.jsp 页面代码如下:scripttype=text/javascriptfunctionmyTest(data){alert(data);}/scriptscripttype=text/javascriptsrc=/index!getData.action?jsoncallback=myTest/script/b.jsp页面代码如下:$(param.jsoncallback)({name: Zhang Huihua, QQ: 350863780})b.jsp页面通过$(param.jsoncallback)得到浏览器端随后要回调的js function name:myTest实际上客户端接收到的response如下:myTest({name: Zhang Huihua, QQ: 350863780})jQuery浏览器端跨域访问目前jQuery $.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的。其原理就是上面第三种方式,script标签的src属性实现跨域访问真实案例:代码如下:$.ajax({url: http://跨域的dns/index!searchJSONResult.action,type: GET,dataType: jsonp,data: {name:”ZhangHuihua”},timeout: 5000,success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数alert(json);},error: function (xhr, ajaxOptions, thrownError){alert(Http status: + xhr.status + + xhr.statusText + \najaxOptions: + ajaxOptions + \nthrownError:+thrownError +
文档评论(0)