这是我的第一个Ajax程序,我无法修复代码,因为我不确定问题出在哪里/是什么。
使用调试器时的错误(我无法解释)是, XMLHttpRequest无法加载http://localhost/function.txt。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。
function calling()
{
var x;
if (window.XMLHttpRequest) {
x = new XMLHttpRequest();
} else {
x = new ActiveXObject("Microsoft.XMLHTTP");
}
x.onreadystatechange = function(){
if(this.readyState == 4 && this.status == 200)
{
document.getElementById("block").innerHTML = this.responseText;
}
};
x.open("GET", "http://localhost/function.txt",true);
x.send();
}
function.txt
<html>
<head></head>
<body>
<h2>Ajax is working</h2>
</body>
</html>
答案 0 :(得分:1)
您的js是否与您的function.txt位于同一位置?
有关CORS的更多信息,请查看以下链接:https://www.html5rocks.com/en/tutorials/cors/
<强>更新强> 这对我有用,我想你的Apache设置可能有些东西......
function calling()
{
var xhr = new XMLHttpRequest(),
method = "GET",
url = "function.txt";
xhr.open(method, url, true);
xhr.onreadystatechange = function () {
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
alert(xhr.responseText);
}
};
xhr.send();
}
calling();
答案 1 :(得分:1)
如果所述域未明确允许,则无法对来自其他域的URL进行Ajax调用(通过“Access-Control-Allow-Origin”标头)。
您的错误意味着您正在从另一个域进行Ajax调用。如果您的function.txt文件与js位于同一位置,请尝试在.open()
中使用相对路径。
答案 2 :(得分:0)
您正在尝试CORS请求,这是不安全的,默认情况下被浏览器禁止。如果您控制目标站点,则可以enable CORS。如果不是这样,那么您将需要编写一个将用作代理的页面,也就是说,您将请求发送到此页面而不是目标站点的页面。该页面将把请求发送到目标页面并将输出发送到浏览器。虽然这是一个可行的解决方案,但您需要确保目标站点的所有绝对路径都能得到很好的处理。