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

Javascript 为什么jQuery.load()可以跨域工作,如果URL有;只有一行“HTML”吗;?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,在我的网站上,我试图编写一个JavaScript脚本,在点击一个按钮时,从一些网站的HTML源中抓取数据,并在我的网站上显示解析/清理后的数据 读取时,显示jQuery.load()方法 $(文档).ready(函数(){ $(“#驱动程序”)。单击(函数(事件){ $('#stage').load('/jquery/result.html'); }); }); 我决定在我的网站上试试。我将URL从相对URL更改为绝对URL--“”--令我惊讶的是,它实际上正在运行(单击提取数据)。这与我在

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

读取时,显示jQuery.load()方法


$(文档).ready(函数(){
$(“#驱动程序”)。单击(函数(事件){
$('#stage').load('/jquery/result.html');
});
});
我决定在我的网站上试试。我将URL从相对URL更改为绝对URL--“”--令我惊讶的是,它实际上正在运行(单击提取数据)。这与我在阅读了几十个SO线程以及jQuery.load()API后的理解相矛盾,即HTTP请求将遵循相同的源策略

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

当我将URL更改为类似的内容或脚本无法运行时

上述参考教程页面上的一行引起了我的注意:

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


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

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

Access-Control-Allow-Origin: *
这将使AJAX能够从跨域获取文件

实际上,例如,通过发送HTTP GET请求可以确认报头存在


我意识到函数不可能违反同源策略

通过以下原因向HTML页面发送GET请求:

得到

标题

*访问控制允许来源:*

内部
load()
只是
$的快捷方式。ajax
load()
的代码是

function load(url, params, callback) {
    // ... some checks and stuff
        jQuery.ajax({
            // settings
        }).done(function (responseText) {
            self.html(selector ?
            jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
        }).complete(callback && function (jqXHR, status) {
            self.each(callback, response || [jqXHR.responseText, status, jqXHR]);
        });
    }
    return this;
}
这意味着它允许来自不同来源的请求,因此它与
load()
完全无关,任何ajax请求都可以在该URL上正常工作,因为它不受相同来源策略的约束

跨源资源共享标准通过添加新的HTTP来工作 允许服务器描述所创建的源集的标头 允许使用web浏览器阅读该信息


这取决于服务器。如果服务器允许:
Access Control Allow Origin:
则它可以工作。请解释。我看不出我的问题有什么天生的问题。嘿,可能是因为他们的投票被锁定了。我对问题进行了编辑,并添加了投票。很快就要爆炸了。现在是0。是的。。。这就是我在回答中添加的内容<代码>:)
function load(url, params, callback) {
    // ... some checks and stuff
        jQuery.ajax({
            // settings
        }).done(function (responseText) {
            self.html(selector ?
            jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
        }).complete(callback && function (jqXHR, status) {
            self.each(callback, response || [jqXHR.responseText, status, jqXHR]);
        });
    }
    return this;
}
Access-Control-Allow-Headers:X-Requested-With
Access-Control-Allow-Origin:*