为什么无法从jQuery加载方法加载外部资源?

前端之家收集整理的这篇文章主要介绍了为什么无法从jQuery加载方法加载外部资源?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用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没有你甚至没有注意到.恼人的…如果是你的银行,它可以直接从你那里偷钱.

讽刺的是,尽管有同样的起源政策,上述的攻击仍然是可能的.

猜你在找的jQuery相关文章