单击按钮,无反应

时间:2022-07-20 16:42:23
情况如下:
运行  ajax基础教程  上面的例子,出现单击按钮无反应的情况,使用的浏览器  IE6。0,FIREFOX 1。5。0。6.
在另外一台电脑上面运行,结果一样。单击无反应。
代码清单  simpleRequest.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Simple XMLHttpRequest</title>
    
<script type="text/javascript">
var xmlHttp;

function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
    
function startRequest() {
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("GET", "simpleResponse.xml", true);
    xmlHttp.send(null);
}
    
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            alert("The server replied with: " + xmlHttp.responseText);
        }
    }
}
</script>
</head>

<body>
    <form action="#">
        <input type="button" value="Start Basic Asynchronous Request" onclick="startRequest();"/>
    </form>
</body>
</html>

服务器端的响应文件simpleResponse.xml就只用一行文本
Hello from the server!

有时间的话麻烦提点建议或者告诉如何解决,谢谢!!!
qq:285230769
mail:wen.285230769@gmail.com

19 个解决方案

#1


返回什么错误消息?

#2


无错误信息返回

#3


恩,有,不过我想不是这个原因
在用FF的时候,可以检测出JS没有出错,提示是xml文件出错。格式不对。

错误: 语法错误
源文件:file:///E:/%CA%E9%BC%AE%D4%B4%C2%EB/Ajax%BB%F9%B4%A1%BD%CC%B3%CC/foundations-of-ajax-examples/Chapter02/web/simpleResponse.xml
行:1,列:1
源代码:
Hello from the server!^

#4


我刚才试了下,把xml文件改为
<?xml version="1.0" encoding="UTF-8"?>
<text>
Hello from the server!
</text>
将不出现任何错误信息,问题依旧,单击 无反应。

#5


建议通过web直接访问那个xml,比如http://localhost/..../**.xml的形式,判断是否能访问得了,如果能看到节点状态的xml,再测试IE下能否响应ajax,这个例子我也做过,但是也只能在IE下反应成功,FF没有效果

#6


谢谢koon。
能够正常运行了(IE6.0,FF1.5.0.6),但还是有一个地方不明白。

正常运行前:我是双击文件在浏览器中打开。点击无效。
正常运行时:我创建了一个虚拟目录指向文件所在的文件夹,运行没问题。

为什么?

#7


这样xmlHttp.responseXML应该就好了吧

#8


我想YOUYOU390你说的对,不过为什么呢?
因为我用Tamper Data查看的时候,如果是双击的话,无反应。
如果是浏览虚拟目录下的文件的话,就可以查看到响应的数据。
host:localhost
user-agent :
Accept:..
..

#9


xmlHttp.open("GET", "simpleResponse.xml", true);

因为你打开的是xml文件,所以就应该是读xml文件的方法啊。

#10


我想我是明白了。~_~,因为
XMLHttpRequest对象的作用是:提供客户端同http服务器通讯的协议
如果我不把文件放在某个虚拟目录下,根本就找不到服务器。所以也就没有任何响应 。

如果理解不对的话,麻烦指出来,谢谢。

2天后结贴,如果没有其他的不同的看法的话。

#11


修正下上面的发言:
我想YOUYOU390你说的对,不过为什么呢?
因为我用Tamper Data查看的时候,如果是双击的话,无反应。
如果是浏览虚拟目录下的文件的话,就可以查看到响应的数据。
。。。。
XMLHTTP参考上面是这样描述的:
http://www.xmlhttp.cn/manual/responsexml.html

responseText

将响应信息作为字符串返回

responseXML

将响应信息格式化为Xml Document对象并返回

所以这里没必要一定要用responseXML,因为我XML文件里面就只有一句话,当作字符串返回也没问题。

#12


xmlHttp.open("GET", "simpleResponse.xml", true);
如果用localhost地址打开,那么地址指向localhost/aaa/simpleResponse.xml
如果双击直接打开,那么地址是simpleResponse.xml,这根本就不存在,应该改为
file:///F:/simpleResponse.xml

#13


^_^Taciterry(面朝大海,春暖花开) 说的很对,不过很奇怪当时怎么也没注意到这个。

#14


if(xmlHttp.status == 200) {
            alert("The server replied with: " + xmlHttp.responseText);
        }

这里的问题,如果是在本地直接双击打开的话,浏览器URL是file:///c:\xxx.htm
xmlHttp返回的不是200,你可以试试返回的是多少

如果是从服务器上浏览的话,成功就返回200

你试试

#15


顶了,接分!

#16


webphoenix() 提到查看返回xmlHttp的状态码status.
我把程序部分改为如此:
原来:
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            alert("The server replied with: " + xmlHttp.responseText);
        }
    }
}
修改:
function handleStateChange() {    
            alert("The server replied with: " + xmlHttp.status);   
}
从服务器上浏览的话,成功返回200
双击打开的话,返回的是0
奇怪,即使在w3c上也找不到0代表什么
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

#17


XMLHttpRequest对象的status属性一般用来返回服务器的HTTP状态码。status为200表示“成功”,status为404代表“页面未找到”。很多书上都是这样写的,一点也不错。

  但是,有时候,特别是刚开始学Ajax的时候,可能会将代码直接在本地运行。这样就出现问题了。如果在本地运行(如:C:\ajax\helloworld.htm),那么status属性不管是在“成功”还是“页面未找到”的情况下,都返回的是0,而不是200和404。这个时候如果还用if(xmlHttp.status==200)来判断运行,则会毫无结果。如果要在本地测试,最好写成if(xmlHttp.status==200 || xmlHttp.status==0)的形式来判断。

#18


按照webphoenix的上面的写法修改了下,if(xmlHttp.status==200 || xmlHttp.status==0)
就可以在本地正常的返回.

但是又有一个新的问题出现了。
我把xml文件修改了下,就比较有意思了:
原文件(一句话):
Hello from the server!
修改后:
<text>
Hello from the server!
</text>

(使用浏览器:FF1.5.0.6)
如果是在IIS下运行的话,结果是:
The server replied with:hello from the server
如果是在本地直接运行:
The server replied with:<text>
hello from the server
</text>
(使用浏览器:IE6.0)
在本地或者服务器端运行,返回结果:
The server replied with:<text>
hello from the server
</text>

谁可以帮忙解释下吗?

#19


此问题以结贴,谢谢上面各位的支持与回答。

#1


返回什么错误消息?

#2


无错误信息返回

#3


恩,有,不过我想不是这个原因
在用FF的时候,可以检测出JS没有出错,提示是xml文件出错。格式不对。

错误: 语法错误
源文件:file:///E:/%CA%E9%BC%AE%D4%B4%C2%EB/Ajax%BB%F9%B4%A1%BD%CC%B3%CC/foundations-of-ajax-examples/Chapter02/web/simpleResponse.xml
行:1,列:1
源代码:
Hello from the server!^

#4


我刚才试了下,把xml文件改为
<?xml version="1.0" encoding="UTF-8"?>
<text>
Hello from the server!
</text>
将不出现任何错误信息,问题依旧,单击 无反应。

#5


建议通过web直接访问那个xml,比如http://localhost/..../**.xml的形式,判断是否能访问得了,如果能看到节点状态的xml,再测试IE下能否响应ajax,这个例子我也做过,但是也只能在IE下反应成功,FF没有效果

#6


谢谢koon。
能够正常运行了(IE6.0,FF1.5.0.6),但还是有一个地方不明白。

正常运行前:我是双击文件在浏览器中打开。点击无效。
正常运行时:我创建了一个虚拟目录指向文件所在的文件夹,运行没问题。

为什么?

#7


这样xmlHttp.responseXML应该就好了吧

#8


我想YOUYOU390你说的对,不过为什么呢?
因为我用Tamper Data查看的时候,如果是双击的话,无反应。
如果是浏览虚拟目录下的文件的话,就可以查看到响应的数据。
host:localhost
user-agent :
Accept:..
..

#9


xmlHttp.open("GET", "simpleResponse.xml", true);

因为你打开的是xml文件,所以就应该是读xml文件的方法啊。

#10


我想我是明白了。~_~,因为
XMLHttpRequest对象的作用是:提供客户端同http服务器通讯的协议
如果我不把文件放在某个虚拟目录下,根本就找不到服务器。所以也就没有任何响应 。

如果理解不对的话,麻烦指出来,谢谢。

2天后结贴,如果没有其他的不同的看法的话。

#11


修正下上面的发言:
我想YOUYOU390你说的对,不过为什么呢?
因为我用Tamper Data查看的时候,如果是双击的话,无反应。
如果是浏览虚拟目录下的文件的话,就可以查看到响应的数据。
。。。。
XMLHTTP参考上面是这样描述的:
http://www.xmlhttp.cn/manual/responsexml.html

responseText

将响应信息作为字符串返回

responseXML

将响应信息格式化为Xml Document对象并返回

所以这里没必要一定要用responseXML,因为我XML文件里面就只有一句话,当作字符串返回也没问题。

#12


xmlHttp.open("GET", "simpleResponse.xml", true);
如果用localhost地址打开,那么地址指向localhost/aaa/simpleResponse.xml
如果双击直接打开,那么地址是simpleResponse.xml,这根本就不存在,应该改为
file:///F:/simpleResponse.xml

#13


^_^Taciterry(面朝大海,春暖花开) 说的很对,不过很奇怪当时怎么也没注意到这个。

#14


if(xmlHttp.status == 200) {
            alert("The server replied with: " + xmlHttp.responseText);
        }

这里的问题,如果是在本地直接双击打开的话,浏览器URL是file:///c:\xxx.htm
xmlHttp返回的不是200,你可以试试返回的是多少

如果是从服务器上浏览的话,成功就返回200

你试试

#15


顶了,接分!

#16


webphoenix() 提到查看返回xmlHttp的状态码status.
我把程序部分改为如此:
原来:
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            alert("The server replied with: " + xmlHttp.responseText);
        }
    }
}
修改:
function handleStateChange() {    
            alert("The server replied with: " + xmlHttp.status);   
}
从服务器上浏览的话,成功返回200
双击打开的话,返回的是0
奇怪,即使在w3c上也找不到0代表什么
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

#17


XMLHttpRequest对象的status属性一般用来返回服务器的HTTP状态码。status为200表示“成功”,status为404代表“页面未找到”。很多书上都是这样写的,一点也不错。

  但是,有时候,特别是刚开始学Ajax的时候,可能会将代码直接在本地运行。这样就出现问题了。如果在本地运行(如:C:\ajax\helloworld.htm),那么status属性不管是在“成功”还是“页面未找到”的情况下,都返回的是0,而不是200和404。这个时候如果还用if(xmlHttp.status==200)来判断运行,则会毫无结果。如果要在本地测试,最好写成if(xmlHttp.status==200 || xmlHttp.status==0)的形式来判断。

#18


按照webphoenix的上面的写法修改了下,if(xmlHttp.status==200 || xmlHttp.status==0)
就可以在本地正常的返回.

但是又有一个新的问题出现了。
我把xml文件修改了下,就比较有意思了:
原文件(一句话):
Hello from the server!
修改后:
<text>
Hello from the server!
</text>

(使用浏览器:FF1.5.0.6)
如果是在IIS下运行的话,结果是:
The server replied with:hello from the server
如果是在本地直接运行:
The server replied with:<text>
hello from the server
</text>
(使用浏览器:IE6.0)
在本地或者服务器端运行,返回结果:
The server replied with:<text>
hello from the server
</text>

谁可以帮忙解释下吗?

#19


此问题以结贴,谢谢上面各位的支持与回答。

#20