2012-03-09 101 views
0

我一直在玩Javascript,现在我来到了Ajax。我试图写的很简单的脚本,将获得该文件的内容 - 与id=test打印在divtxt文件内容。这是脚本:为什么我的基本Ajax脚本不工作?

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一直是空的。为什么?

+4

我会建议使用框架,如jQuery阿贾克斯,它会自动处理大量不同的浏览器,甚至同一个浏览器,但不同版本之间的不一致。 – alykhalid 2012-03-09 12:52:04

+0

你会得到什么错误? – 2012-03-09 13:07:46

+0

@ClydeLobo正如我发现刚才 - 我的'xmlhttp.status'是整个时间'0'。这是为什么?我应该得到'200' – Patryk 2012-03-09 13:26:14

回答

1

对于除IE之外的浏览器

IE的活动X对象似乎不那么在意的准备状态,其他浏览器可能没有加载速度不够快的时候文本你运行你的函数(因此你为什么得到空白而不是文件内容)。 IE的活动X似乎自动处理并忽略就绪状态,因此您必须按照以下方式分解代码。通常你检查status请求,看看它的访问responseText之前被完全读取或没有。

添加onreadystatechange无法检查status属性,因为有一个文件系统请求而作出任何HTTP请求。 (该状态将始终要求为0通过HTTP没有取得)我能提供的最好的是这样的:

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

运行在文件系统在一般

AJAX应用程序通常不是一个好主意,有很多注意事项,以这条路线。通常,本地开发是通过在开发机器上安装到本地主机的Web服务器完成的。

+0

非常好的anwer,但它不能这样工作。 – Patryk 2012-03-09 20:16:57

+0

如果你能告诉我你正在使用的操作系统和浏览器(和版本),我可以尝试帮助你进一步得到一个工作版本。 – user17753 2012-03-09 20:45:35

+0

我使用Windows 7(64位)和Opera 11.61。 – Patryk 2012-03-10 15:49:39

-1

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

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

这是更简单,减少错误

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

请让我知道,如果它的工作原理的例子。

+0

我已经尝试这样做:在调试时我发现我的'xmlhttp.status'是整个时间'0'。那么这里有什么问题? – Patryk 2012-03-09 13:23:51

+0

您是否尝试提出任何跨域请求...您似乎没有得到回应请求的回复。 – testndtv 2012-03-09 16:23:22

+0

我正在做本地机器上的所有内容 - 如前所述,没有任何Web服务器。 – Patryk 2012-03-09 16:38:30

-1

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

你不需要PHP,但是你需要Apache或类似的网络服务器。

+0

我想我不需要服务器,但如果我错了请纠正我。 – Patryk 2012-03-09 13:19:31

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 /歌剧/铬。如果IE浏览器,使用方法:

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

我也试过这个 - 异步请求 - 它没有工作。 – Patryk 2012-03-09 13:12:10