关于javascript:XMLHttpRequest无法加载文件:

XMLHttpRequest cannot load file:

本问题已经有最佳答案,请猛点这里访问。

我有问题从api接收数据与所有其他链接它没关系但是那个很难..所以这是代码

1
2
3
4
5
6
7
8
9
10
$.ajax({
url: 'proxy.php?url=https://na.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/NA1/26667724?api_key=xxxx',
dataType:"json",
success: function() {
alert("Success");
},
error: function() {
console.log("Error")
}
});

这是我正在使用的PHP代码。

1
2
3
4
5
6
7
8
9
    <?php
header("Content-Type: text/javascript; charset=utf-8");
if (!isset($_GET['url'])) {
   die();
}
$url = urldecode($_GET['url']);
$url = 'https://' . str_replace('https://', '', $url);
echo file_get_contents($url);
?>

在控制台上显示日志---> XMLHttpRequest无法加载文件:/// D:/Install/xampp/htdocs/allInOne/proxy.php?url = https://na.api.pvp.n...pectatorGameInfo/NA1/26667724?API_KEY= XXX。 交叉源请求仅支持协议方案:http,data,chrome,chrome-extension,https,chrome-extension-resource.send @ jquery-1.11.3.js:9664jQuery.extend.ajax @jquery-1.11.3。 js:9215jQuery。(匿名函数)@jquery-1.11.3.js:9361jQuery.extend.getJSON @jquery-1.11.3.js:9344renderInfo @ render.js:89onclick @ index.html:15
render.js:85错误


看起来错误在proxy.php文件中,它不能使用file_get_contents,因为url返回404。

和PHP相呼应

1
2
3
<br />
Warning:  file_get_contents(https://euw.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/EUW1/19496550?api_key=xxxx): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in C:\xampp\htdocs\test\proxy.php on line 8<br />

当javascript尝试读取响应时,它失败了。

也许这个网址错了?
https://euw.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/EUW1/19496550?api_keyxxx
编辑

去掉

1
2
3
headers:{"Access-Control-Allow-Origin:":"*",
        'Access-Control-Allow-Headers':"X-Requested-With",},
crossDomain: true,

并改变

1
dataType:"jsonp",

1
dataType:"json",

只有在javascript中才需要跨域请求,当您从具有Php的URL请求数据时,不需要此规则

EDIT2
这个问题直接点击加载html文件,因此它给出了交叉原始策略的错误。
通过地址修复来自xamp的文件


更换

1
header("Content-Type: text/javascript; charset=utf-8")

1
2
header("Content-Type: text/javascript; charset=utf-8");
//....................................................^You miss this ';'


你的标题行是

1
header("Content-Type: text/javascript; charset=utf-8")

我的标题行是

1
header("Content-Type: text/javascript; charset=utf-8");