当前位置: 首页 > 面试题库 >

为什么我不能从jQuery加载方法加载外部资源?

呼延源
2023-03-14
问题内容

在使用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。烦人…如果是您的银行,可以直接从您那里窃取资金。

具有讽刺意味的是,尽管采用了相同的来源策略,但仍可能发生上述攻击。



 类似资料:
  • 问题内容: 我正在尝试使用Angular和Phonegap加载位于远程服务器上但遇到问题的视频。在我的JSON中,URL作为纯HTTP URL输入。 我的影片范本 我所有其他数据都已加载,但是当我查看控制台时,出现以下错误: 我尝试添加配置设置,但没有解决我的问题。 问题答案: 这是唯一对我有用的解决方案: 然后在iframe中:

  • 我洛基,在“开始”之后,我遵循https://getbootstrap.com/docs/4.3/layout/overview/的指示(我猜在那个例子中缺少了一些东西) 我说: 链接到头标签中的css文件 但是它不起作用,类“hid-ph-flex”总是在“代码”显示中:无“代码”,火狐调试器警告说:“未知规则或错误读取规则在“包括” 我想我忘了一份文件,有什么帮助吗???

  • 问题内容: 这是我的项目的布局: 这是Jenkins工作区的布局: 在eclipse下,测试运行没有任何错误。在詹金斯身上,测试只是失败了。Jenkins无法找到资源。以下是测试执行的一些输出: eclipse Jenkins 如您所见,Jenkins找不到我的资源。 我想念什么? 问题答案: 我终于解决了我的问题。在类路径上,该文件是在我的代码中调用该文件时命名的。您注意到大写了吗? 在Wind

  • 正如你所看到的,詹金斯没有找到我的资源。 我错过了什么?

  • 问题内容: 我正在使用jQuery SVG。我无法向对象添加或删除类。有人知道我的错误吗? SVG: 不会添加该类的jQuery: 我知道SVG和jQuery可以很好地协作,因为我 可以 定位对象并在单击对象时发出警报: 问题答案: 阅读以下两个答案。 jQuery 3修复了潜在的问题 Vanilla JS:可在现代浏览器中使用 jQuery(小于3)无法将类添加到SVG。 与SVG一起使用,因此

  • 问题内容: 因此,我很难正常工作。我这样称呼它: 但是由于某种原因,在加载HTML页面时,不包含任何外部.js(我编写的实际上用于执行某些操作的文件)。我遵循以下重要的加载约定 有谁知道为什么没有正确加载?另外,pageshow函数也不会被触发,这很奇怪。看起来像这样: 现在,页面已呈现,但是没有任何功能发生。如果我入侵它并执行以下操作: 它将正常运行。 问题答案: jQuery Mobile不会