为什么我的基本Ajax脚本不起作用?

时间:2012-03-09 12:45:32

标签: javascript ajax xmlhttprequest file-get-contents

我一直在玩Javascript,现在我来到了Ajax。我正在尝试编写一个非常简单的脚本来获取文件内容 - 使用txtdiv中打印id=test文件内容。这是脚本:

function loadXMLDoc(url)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.open("GET" , url ,false);
    xmlhttp.send(null);
    document.getElementById('test').innerHTML = xmlhttp.responseText;  
}

当我在本网站上使用它时:

<div id="test"  name="test"> HELLo </div>
<button type="button" onclick="loadXMLDoc('test1.txt')">ClickMe1</button>

使用此脚本HELLo替换为任何内容 - 脚本会清空容器。

也许我错过了一些微不足道的东西但是我需要安装PHP吗?我不这么认为,但是......我不确定这里发生了什么。当我调试时,xmlhttp一直是空的。为什么?

6 个答案:

答案 0 :(得分:1)

在替换文本之前,您需要检查readyState和HTTP响应状态;

if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("test").innerHTML=xmlhttp.responseText;
    }

示例http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

如果有效,请告诉我。

答案 1 :(得分:1)

适用于IE以外的浏览器

IE的活动X对象似乎并不关心就绪状态,其他浏览器在运行您的函数时可能没有足够快地加载文本(因此您获取空白而不是文件内容的原因)。 IE的活动X似乎自动处理这个并忽略就绪状态,所以你必须以不同方式分解代码,如下所示。通常,在访问status之前,请检查请求的responseText以查看是否已完全阅读。

添加onreadystatechange无法检查status属性,因为在文件系统请求中没有发出HTTP请求。 (对于非HTTP请求,状态始终为0)我能提供的最好的是:

function loadXMLDoc(url)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
        document.getElementById('test').innerHTML = xmlhttp.responseText;
        }
       xmlhttp.open( "GET", url );
       xmlhttp.send(null);

    }
    else
    {// code for IE6, IE5
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

       xmlhttp.open( "GET", url );
       xmlhttp.send(null);
       document.getElementById('test').innerHTML = xmlhttp.responseText;
    }

}

对于CHROME

如果您使用 CHROME ,则必须使用--allow-file-access-from-files开关启动Chrome。否则,它将拒绝文件系统 ajax请求。 (即使使用所谓的“简单”库(如jQuery),也必须设置它。

一般在文件系统上运行AJAX应用程序

通常不是一个好主意,这条路线有很多警告。通常,本地开发是通过在开发计算机上安装到localhost的Web服务器完成的。

答案 2 :(得分:0)

答案 3 :(得分:0)

首先,你必须与Same Origin Policy作斗争。

同步请求的简单工作代码如下:

var req = new XMLHttpRequest();
req.onreadystatechange = function() {

if (req.status == 200 && req.readyState == 4) {
    ...
}

req.open('GET', url, true);
req.send(null);

注意这适用于Firefox / Opera / Chrome。如果是IE,请使用:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

答案 4 :(得分:-1)

尝试使用jQuery。下载最新版本here并编写此代码段:

function loadXMLDoc(url) {   
  $("#test").load(url);
}

它更简单,更不容易出错

答案 5 :(得分:-1)

您需要一台服务器来监听请求。您的常规文件系统将无法响应AJAX请求。

您不需要PHP,但是您需要apache或类似的Web服务器。