BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #23487同步于 2014/2/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[问题]求问javascript跨域访问的问题

oo77
2014/2/26镜像同步10 回复
<!DOCTYPE html PUBLIC "-//W#C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transition.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>获取数据</title> <meta charset="utf-8" /> <script type="text/javascript" src="jquery-1.10.2.min.js"></script> <style type="text/css"></style> <script type="text/javascript"> $(function(){ $("#Button1").click(function(){ $.get("http://www.w3school.com.cn/example/xmle/note.xml",function(data){ $("#divTip").empty(); var strHTML=""; $(data).find("note").each(function(){ var $strUser=$(this); strHTML+="发送给:"+$strUser.find("to").text()+"<br>"; strHTML+="发出者:"+$strUser.find("from").text()+"<br>"; strHTML+="标题:"+$strUser.find("heading").text()+"<hr>"; }) $("#divTip").html(strHTML); }) }) }) </script> </head> <body> <div class="divFrame"> <div class="divTitle"> <input type="button" id="Button1" class="bnt" value="请求数据" /> </div> <div class="divContent"> <div id="divTip"></div> </div> </div> </body> </html> 上面代码运行时chrome出现错误XMLHttpRequest cannot load http://www.w3school.com.cn/example/xmle/note.xml. Origin http://localhost is not allowed by Access-Control-Allow-Origin.怎么解决?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
gscrainy机器人#1 · 2014/2/26
明显跨域了 本地和w3school不同域 用fillder将本地文件影射到线上 给个和w3chool相同同域名路径
myStefanie机器人#2 · 2014/2/26
要么对方接口支持jsonp,要么你在自己的server上包一层请求
oo77机器人#3 · 2014/2/26
怎么包一层请求呢? 【 在 myStefanie 的大作中提到: 】 : 要么对方接口支持jsonp,要么你在自己的server上包一层请求
husband机器人#4 · 2014/2/26
搜一下iframe
rhj1122机器人#5 · 2014/2/26
【 在 oo77 的大作中提到: 】 : 怎么包一层请求呢? : 板凳所谓的“包一层”其实就是说web端代理的办法 用一个iframe来请求你需要的数据,然后ajax请求这个iframe拿到的东西,就不跨域了
jojos机器人#6 · 2014/2/26
像这种做简单的练习,把浏览器同源限制取消就可以了。实际项目中就需要采用恰当的技术。 如果用的chrome浏览器: 方法有多种,首先要关闭已经打开的chrome浏览器 一种方法:命令行进入到chrome.exe目录,通过命令行启动chrome并传递命令行参数:chrome --disable-web-security 第二种方法是选中chrome.exe右键:创建快捷方式,选中快捷方式,右键:属性,点击快捷方式选项卡,找到目标栏,在后面添加-args -disable-web-security 得到类似这样的字符串:"C:\Program Files\Google\Chrome\Application\chrome.exe" -args -disable-web-security 点击确定,以后从这个快捷方式打开的chrome就没有了同源限制 下面是运行上面代码的结果 发送给:George 发出者:John 标题:Reminder
a789asd456fg机器人#7 · 2014/2/26
【 在 rhj1122 的大作中提到: 】 : : 板凳所谓的“包一层”其实就是说web端代理的办法 : 用一个iframe来请求你需要的数据,然后ajax请求这个iframe拿到的东西,就不跨域了 你的方法应该不可行,仍然存在跨域问题,当前域根本就无法获取到iframe里面的内容,包一层的意思应该是是在当前域的后台做一个正向代理,每次数据访问都是访问当前域的后台,后台负责请求其它域。
rhj1122机器人#8 · 2014/2/26
【 在 a789asd456fg 的大作中提到: 】 : 你的方法应该不可行,仍然存在跨域问题,当前域根本就无法获取到iframe里面的内容,包一层的意思应该是是在当前域的后台做一个正向代理,每次数据访问都是访问当前域的后台,后台负责请求其它域。 iframe的页面请求是可以跨域的嘛,就像文件图片src一样,jsonp怎么实现?还不是就是利用js文件可以跨域请求的方法来实现的。你应该是理解错我意思了,不是说在iframe里面用ajax。是用ajax请求已经拿到了的同域数据。 跨域请求几个方法,jsonp、iframe桥接都是需要能控制两个域,剩下的就只有web端代理和flash能够做到。
a789asd456fg机器人#9 · 2014/2/26
【 在 rhj1122 的大作中提到: 】 : : iframe的页面请求是可以跨域的嘛,就像文件图片src一样,jsonp怎么实现?还不是就是利用js文件可以跨域请求的方法来实现的。你应该是理解错我意思了,不是说在iframe里面用ajax。是用ajax请求已经拿到了的同域数据。 : 跨域请求几个方法,jsonp、iframe桥接都是需要能控制两个域,剩下的就只有web端代理和flash能够做到。 我明白你说的意思,但是iframe跨域并不是你说的那样,iframe是可以拿到其它域的数据,但是当前域依旧没有办法获取到iframe里面的数据,这个你可以测试一下。