Ajax中的URL open()

时间:2017-03-31 12:09:29

标签: javascript ajax

这是我的第一个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>

3 个答案:

答案 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。如果不是这样,那么您将需要编写一个将用作代理的页面,也就是说,您将请求发送到此页面而不是目标站点的页面。该页面将把请求发送到目标页面并将输出发送到浏览器。虽然这是一个可行的解决方案,但您需要确保目标站点的所有绝对路径都能得到很好的处理。