Ajax中readyState状态不变

中微子 2014-05-02 11:20:51
下面的代码想要完成的任务是:当点击图片时,后台记录下图片被选中或者被取消选中
var xmlhttp;
function recordBehavor(content,cfun){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = cfun;
xmlhttp.open("POST","writeToFile.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("str="+content);
}

function imgClick(id){//点击图片的处理
var time = new Date();
if (id.title=="unselected"){
id.title="selected"
id.style.borderColor="#0000FF";//图片被选中后边框变化
recordBehavor(time.toJSON()+","+id.src + ",selected\r\n",function(){alert(xmlhttp.readyState+"-------"+xmlhttp.status);});//测试Ajax返回状态
} else {
id.title="unselected"
id.style.borderColor="#FFFFFF";//图片取消选中后边框变化
recordBehavor(time.toJSON()+","+id.src + ",cancled\r\n",function(){alert(xmlhttp.readyState+"-------"+xmlhttp.status);});//测试Ajax返回状态
}
}

问题是,我发现点击图片以后只返回了readyState=1,status=0这一个状态,其他的状态都没有返回。
求指点这是怎么回事儿?
...全文
232 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-05-03
  • 打赏
  • 举报
回复
你的代码在我这里运行正常 估计是你的运行方式或浏览器的问题 我之所以给那样的测试代码,目的就在于:确保程序是以 web 方式运行的
中微子 2014-05-02
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
不是从网站上运行的吧?
我在自己的电脑上搭建的服务器,然后用不同机器访问。 date对象有toJSON方法。 本来我是打算图片被点击以后在后台用php把图片选中或取消选中的状态以及时间写入到一个txt文本文件中。我在不同的机器上访问发现最后的txt文件里面都没有记录下来想要的东西。(php代码可以确定没有问题) 所以我就尝试查看一下Ajax返回状态的变化,发现readyState只有1这个状态返回了,其他都没有。 非常感谢你提供的实现思路,确实简洁很多。 只是你看我的那个代码有没有问题,我感觉应该没错啊,不知道为什么跟预期结果不一样。
中微子 2014-05-02
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
没看出什么问题,测试了也可以获取到1~4的状态 是不是你的这个页面运行很久。。导致都没有到状态“2 - (载入完成)send()方法执行完成,已经接收到全部响应内容”你就没有继续等待了
我等了好久,也没有出现结果。 不过也有这种可能性,也许我等的时间不够 非常感谢。
xuzuning 2014-05-02
  • 打赏
  • 举报
回复
Date 对象有 .toJSON 方法吗?我孤陋了
一般判断返回状态不应该在动态的回调函数中进行,到处都写也不是很麻烦吗?
基于这两点,我写了个集成的测试程序。修改起来就不必打开两个文件
if($_POST) {
print_r($_POST);
exit;
}
?>
<script>
var xmlhttp;
function recordBehavor(content,cfun){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
cfun(xmlhttp.responseText);
}
}
xmlhttp.open("POST","<?php echo $_SERVER['PHP_SELF']; ?>",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("str="+content);
}

function imgClick(id){//点击图片的处理
var time = new Date();
if (id.title=="unselected"){
id.title="selected"
id.style.borderColor="#0000FF";//图片被选中后边框变化
recordBehavor(time.toString()+","+id.src + ",selected\r\n",function(data){ alert(data);});//测试Ajax返回状态
} else {
id.title="unselected"
id.style.borderColor="#FFFFFF";//图片取消选中后边框变化
recordBehavor(time.toString()+","+id.src + ",cancled\r\n",function(data){alert(data);});//测试Ajax返回状态
}
}
</script>
<img src='03.gif' id='img1' onclick=imgClick(this) style='border-color:#000'>

xuzuning 2014-05-02
  • 打赏
  • 举报
回复
不是从网站上运行的吧?
Go 旅城通票 2014-05-02
  • 打赏
  • 举报
回复
没看出什么问题,测试了也可以获取到1~4的状态 是不是你的这个页面运行很久。。导致都没有到状态“2 - (载入完成)send()方法执行完成,已经接收到全部响应内容”你就没有继续等待了

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧