如果 URL“只有一行 HTML”,jQuery.load() 怎么可以跨域工作?

K_7*_*K_7 5 html javascript ajax jquery

在我的网站上,我正在尝试编写一个 JavaScript 脚本,该脚本在单击按钮时从某些网站的 HTML 源中抓取数据并在我的网站上显示解析/清理的数据。

在阅读TutorialsPoint 的 JQuery - Ajax 页面后,它展示了 jQuery.load() 方法,

<script type = "text/javascript" language = "javascript">
     $(document).ready(function() {
        $("#driver").click(function(event){
           $('#stage').load('/jquery/result.html');
        });
     });
</script>
Run Code Online (Sandbox Code Playgroud)

我决定在我的网站上尝试一下。我将 URL 从相对 URL 更改为绝对 URL——“ http://www.tutorialspoint.com/jquery/result.html ”——令我惊讶的是,它实际上正在运行(单击EXTRACT DATA)。这与我的理解相矛盾,在阅读了数十个 SO 线程以及 jQuery.load() API 后,HTTP 请求将受制于同源策略。

由于浏览器安全限制,大多数“Ajax”请求都遵循同源策略;请求无法从不同的域、子域、端口或协议成功检索数据。~ API

当我将 URL 更改为http://google.com/http://www.example.com/之类的内容时,脚本不起作用。

前面提到的教程页面上的一行引起了我的注意:

这里 load() 向指定的 URL /jquery/result.html 文件发起 Ajax 请求。加载此文件后,所有内容都将填充在带有 ID stage 标记的内部。假设,我们的 /jquery/result.html 文件只有一行 HTML

如果指定 URL 处的 HTML 文件只有一行,那么 load() 如何跨域工作?

Pra*_*man 3

这与文件或结构无关。这是关于启用跨源请求共享。如果相关服务器或请求具有以下标头:

Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)

这将使 AJAX 也能够从跨域获取文件。

事实上,例如,通过Hurl.it发送 HTTP GET 请求可以确认标头存在。

索取图片