在使用jQuery学习Ajax请求的过程中,我尝试通过点击链接加载google主页.所以我写了一些类似的东西:
$("#ajax").click (function (event) { $("#g").html("Loading..."); $("#g").load("http://www.google.com"); event.preventDefault (); });
身体的某处
<a id="ajax" href="http://www.google.com">Load file ajax way</a> <div id="g">Click the above link to load the page...</div>
哪个没有工作,最初我以为有一些语法错误或某事.但是后来当我在服务器上替换了一个静态html文件的google url,它工作正常.
$("#g").load("Temp.htm");
它是否设计为这样工作(如果是,为什么?)或我做错了什么?
编辑:请问任何人可以解释(或引用)跨域ajax调用引入的安全问题?换句话说,为什么打开另一个浏览器标签并打开谷歌而不是在页面内安全?是保护来电者还是被叫?
解决方法
Jquery使用ajax(XMLHttpRequest)请求加载数据,但浏览器允许这个资源在同一个域上. (上面的答案提到
Same origin policy).这就是为什么它适用于Temp.htm,但不适用于www.google.com.
>解决这个问题的一个方法是创建一个服务器脚本,它会为你加载页面 – 基本上是一个代理.然后你打电话
$('#g').load("load.PHP?url=google.com")
>另一个解决方案是使用iframe进行通信 – 我发现这个库,这似乎是你需要的:jquery-crossframe
>第三个选项是JSONP,但这不会适用于您的情况.
我的意见 – 去服务器端代理的第一个选项.
为什么有同样的起源政策?
想像你正在检查你的ebay帐户的一些东西.然后在另一个标签中打开我的网站,在那里我有一个脚本,使一系列请求ebay(您仍然登录),并出价你的奥迪A8没有你甚至没有注意到.恼人的…如果是你的银行,它可以直接从你那里偷钱.
讽刺的是,尽管有同样的起源政策,上述的攻击仍然是可能的.