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

Javascript 为什么我的基本Ajax脚本不起作用?,javascript,ajax,xmlhttprequest,file-get-contents,Javascript,Ajax,Xmlhttprequest,File Get Contents,我一直在玩Javascript,现在我来到了Ajax。我正在尝试编写一个非常简单的脚本来获取文件内容——用id=test打印div中的txt文件内容。以下是脚本: function loadXMLDoc(url) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else

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

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>
你好 单击我1 使用此脚本时,
HELLo
被零替换-脚本清空容器


也许我遗漏了一些琐碎的东西,但我需要安装PHP吗?我不这么认为,但是。。。我不知道这里发生了什么。调试时,
xmlhttp
始终为空。为什么?

试试jQuery。下载最新版本并编写以下代码段:

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

现在,调用ajax(如xmlhttp=newXMLHttpRequest())是一种非常简单且不容易出错的老方式

你有很多其他的选择


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

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


请让我知道它是否有效。

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


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

首先,您必须与之抗争

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

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");

适用于IE以外的浏览器

IE的ActiveX对象似乎不太关心就绪状态,其他浏览器在运行函数时可能没有足够快加载的文本(因此,您为什么要获得空白而不是文件内容)。IE的active X似乎会自动处理此问题,并忽略就绪状态,因此您必须按如下所示对代码进行不同的分解。通常,在访问
响应文本
之前,您会检查请求的
状态
,查看请求是否已被完全读取

添加
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。否则,它将拒绝文件系统ajax请求。(即使使用所谓的“更容易”的库(如jQuery),也必须进行设置)

通常在文件系统上运行AJAX应用程序


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

我建议使用一个框架,例如JQuery for ajax,它会自动处理不同浏览器之间的许多不一致,甚至是同一浏览器但不同版本之间的不一致。@ClydeLobo,正如我刚才发现的-我的
xmlhttp。状态是整个时间
0
。为什么是这样?我应该得到
200
我也尝试过这个-异步请求-它也不起作用。我想我不需要服务器,但如果我错了,请纠正我。我尝试过这个,并且:在调试时,我发现我的
xmlhttp.status
一直都是
0
。那么这里出了什么问题?您是否正在尝试发出任何跨域请求…您似乎没有收到您发出的请求的响应..我正在本地计算机上执行所有操作-如前所述,没有任何web服务器。哦,好的..那么您可以在不同的浏览器上尝试它…因为所有浏览器都不支持本地AJAX..它需要http协议…如果您能告诉我您使用的是什么操作系统和浏览器(以及版本),我可以尝试进一步帮助您获得工作版本。我使用的是Windows 7(64位)和Opera 11.61。