在使用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调用引入的安全性问题吗?换句话说,为什么可以安全地打开另一个浏览器选项卡并打开google而不从页面内部打开?是为了保护呼叫者或被呼叫者?
jQuery使用ajax(XMLHttpRequest)请求来加载数据,但是浏览器允许此请求用于同一域上的资源。(上面的答案提到了同源政策)。这就是为什么它可与Temp.htm一起使用的原因,而不适用于www.google.com。
解决此问题的一种方法是创建一个服务器脚本,该脚本将为您加载页面-基本上是代理。然后你打电话
$('#g').load("load.php?url=google.com")
另一个解决方案是使用iframe进行通信-我发现了这个库,这似乎是您所需要的:jquery-crossframe
第三个选项是JSONP,但在您的情况下不起作用。
我的意见-选择服务器端代理作为第一选择。
为什么会有相同的原产地政策?
想象一下,您正在检查eBay帐户上的某些内容。然后,在另一个选项卡中,打开我的网站,我在其中的脚本中发出了一系列向ebay发出请求(您仍处于登录状态)的出价,甚至在没有引起注意的情况下竞标奥迪A8。烦人…如果是您的银行,可以直接从您那里窃取资金。
具有讽刺意味的是,尽管采用了相同的来源策略,但仍可能发生上述攻击。