Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨域XHR_Javascript_Xmlhttprequest_Cross Domain - Fatal编程技术网

Javascript 跨域XHR

Javascript 跨域XHR,javascript,xmlhttprequest,cross-domain,Javascript,Xmlhttprequest,Cross Domain,嗨,我面临一个奇怪的问题。我需要使用来自不同领域的webservice。所以我研究了chrome插件SimpleREST客户端的代码,发现他们正在使用这个函数来生成XHR function sendRequest() { clearFields(); if ($("#url").val() != "") { var a = new XMLHttpRequest; a.onreadystatechange = readResponse; try { a.op

嗨,我面临一个奇怪的问题。我需要使用来自不同领域的webservice。所以我研究了chrome插件SimpleREST客户端的代码,发现他们正在使用这个函数来生成XHR

function sendRequest() {
clearFields();
if ($("#url").val() != "") {
    var a = new XMLHttpRequest;
    a.onreadystatechange = readResponse;
    try {
        a.open($("input[type=radio]:checked").val(), $("#url").val(), true);
        //This code is for adding headers
        var b = $("#headers").val();
        b = b.split("\n");
        for (var c = 0; c < b.length; c++) {
            var d = b[c].split(": ");
            d[1] && a.setRequestHeader(d[0], d[1])
        }
        jQuery.inArray($("input[type=radio]:checked").val(), ["post", "put"]) > -1 ? a.send($("#postputdata").val()) : a.send("")
    } catch (e) {
        console.log(e);

        $("#responsePrint").css("display", "")
    }
} else {
    console.log("no uri");

}
}
但是使用我的代码,我得到的
XMLHttpRequest无法加载http://aplikace.mvcr.cz/sbirka-zakonu/SearchResult.aspx?q=1/2013&typeLaw=zakon&what=Cislo_zakona_smlouvy. 起源http://localhost:51582 访问控制允许源站不允许使用。
那么问题出在哪里呢?为什么以前的代码有效,而我的代码却几乎不一样

编辑: 我还尝试使用此函数调用hte webservice

$.ajax({
    type: "GET",
    url: "http://aplikace.mvcr.cz/sbirka-zakonu/SearchResult.aspx?q=1/2013&typeLaw=zakon&what=Cislo_zakona_smlouvy",
    contentType: "script; charset=utf-8",
    dataType: "jsonp",
    success: function (msg) {
        var tes = $(msg);
    },
    error: function (xhr, status, err) {
    }
});

我想做的是将响应读取为DOM,因为webservice返回整个HTML页面,我只需要一个div,但现在我得到了
未捕获的SyntaxError:uncontracted token,这让您无法执行。因此出现了错误
http://localhost:51582 访问控制允许源站不允许。浏览器加载项/扩展以不同的权限在与常规网页不同的环境中运行。我怀疑你的代码应该能工作,如果做成一个插件。它只是不能像普通网页那样工作


从CORS到代理都有解决此问题的方法。在这里或谷歌搜索“跨域ajax”。

正如其他人所指出的,这是由于的原因。这是由浏览器强制执行的,这意味着附加组件可以绕过此限制。这应该能回答你最初的问题

如何避开这个问题?有很多种方法,但大多数都需要服务器的某种合作。人们已经在这里提到了一些解决方法,显然您尝试了JSONP路径,但出现了错误

你为什么会出错?因为脚本希望得到JSONP格式的响应,但它没有得到:它得到了一个HTML响应。我认为这种方法在您的情况下不起作用,因为服务器肯定不是为此而设计的

现在真正的问题是:你为什么要这样做?根据你的回答,我可以想出几种解决办法

例如,如果您需要访问该页面中显示在网站上的信息,我认为最简单的解决方案是使用代理(有关更多信息,请参阅)

如果您只是出于个人目的在自己的计算机上使用此功能,则在某些浏览器中可以专门禁用同源策略检查

例如,在Chrome中,使用以下选项运行它可以做到这一点:(警告:不支持!安全性肯定会受到影响)

如果执行此操作(禁用浏览器的安全检查),即使是一个简单的:

$.get("http://aplikace.mvcr.cz/sbirka-zakonu/SearchResult.aspx?q=1/2013&typeLaw=zakon&what=Cislo_zakona_smlouvy", function(data) {
    console.log(data);
},'html');

可以正常工作。

从运行时原始代码是否正常工作?可能是的副本,但如何从REST客户端(它是浏览器的附加组件,因此从我的IP运行)正常工作?如果真的如你所说,有没有办法让它发挥作用?因为当我尝试使用jQuery和get()以及参数jsonp时,它起了作用,但在这种情况下,如果jQuery支持jsonp而不是发出jsonp请求,我就不能使用jQuery。我尝试按照邹的建议使用jsonp,但我遇到了另一个错误,正如我在edit中所描述的那样
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
chrome --disable-web-security
$.get("http://aplikace.mvcr.cz/sbirka-zakonu/SearchResult.aspx?q=1/2013&typeLaw=zakon&what=Cislo_zakona_smlouvy", function(data) {
    console.log(data);
},'html');