2 cyoeki cyoeki 于 2016.09.22 13:26 提问

ajax的xmlhttp.readystate一直等于2
 window.onload = function(){
        var xmlHttp = createXMLHttpRequest();
        xmlHttp.open("GET","<c:url value='/ProvinceServlet'/>",true);
        xmlHttp.send(null);
        xmlHttp.onreadystatechange = function(){
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                var text = xmlHttp.responseText;
                var proArray = eval("("+text+")");
                //document.write(xmlHttp.readyState);
                //document.write(xmlHttp.status == 200);
                for(var i=0;i<proArray.length;i++){
                    var pro = proArray[i];
                    var option = document.createElement("option");
                    option.value = pro.pid;
                    var node = document.createTextNode(pro.name);
                    option.appendChild(node);
                    document.getElementById("p").appendChild(option);
                }
            }else {
                document.write(xmlHttp.readyState==4);
                document.write(xmlHttp.status == 200);
            }
        };
    };

xmlHttp.status == 200 输出是true,但是xmlHttp.readyState==4输出是false。

以下是servlet的代码:

 public class ProvinceServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        Dao dao = new Dao();
        List<Province> listProvinces = dao.findAllProvince();
        String jsonProvince = JSONArray.fromObject(listProvinces).toString();
        response.getWriter().print(jsonProvince);
    }

}

5个回答

showbo
showbo   Ds   Rxr 2016.09.22 13:44
已采纳

应该是ie下缓存了,加时间戳防止缓存

  xmlHttp.open("GET","<c:url value='/ProvinceServlet'/>?_"+new Date().getTime(),true);

ajax状态

cyoeki
cyoeki 回复showbo: 幡然醒悟!谢谢前辈!!
接近 2 年之前 回复
showbo
showbo 回复cyoeki: 知道了。。你调用了 document.write(xmlHttp.readyState==4);,文档流关闭调用这个会覆盖当前页面内容的,导致ajax后续都被释放了,只能执行一次,改为alert
接近 2 年之前 回复
cyoeki
cyoeki 但是现在解析不到数据,怎么办?
接近 2 年之前 回复
showbo
showbo 回复cyoeki: 状态2以后status就200了啊。。不是要4了才是200。2就已经加载完毕了。3是解析,4是全部解析完毕,看链接里面的说明
接近 2 年之前 回复
cyoeki
cyoeki 前辈,还是不知道问题在哪啊?
接近 2 年之前 回复
cyoeki
cyoeki 还是不行啊
接近 2 年之前 回复
Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.22 13:33

感觉是服务器端数据处理的原因。

cyoeki
cyoeki 回复Marksinoberg: 没问题的,项目名之类的都正确的
接近 2 年之前 回复
Marksinoberg
Marksinoberg 回复Marksinoberg: 写错了吧。
接近 2 年之前 回复
Marksinoberg
Marksinoberg 回复cyoeki: "<c:url value='/ProvinceServlet'/>", 试试这个,看看网页源码上显示的地址正确不?
接近 2 年之前 回复
cyoeki
cyoeki 而且单独访问servlet的话是可以得到数据的
接近 2 年之前 回复
Marksinoberg
Marksinoberg 回复cyoeki: 对服务器端的这个借口进行一下测试,看看是否能够返回预期的数据。就知道问题所在了。
接近 2 年之前 回复
cyoeki
cyoeki 感觉应该是服务器端的问题,但是怎么解决啊?
接近 2 年之前 回复
Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.22 13:54

网页源码

我意思是从这里面看那个ajax的url地址是什么。

cyoeki
cyoeki 截图是这个样子的:
接近 2 年之前 回复
cyoeki
cyoeki   2016.09.22 13:54

图片说明

Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.22 13:59
 0 - (未初始化)还没有调用send()方法 
1 - (载入)已调用send()方法,正在发送请求 
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容 
3 - (交互)正在解析响应内容 
4 - (完成)响应内容解析完成,可以在客户端调用了 

对症下药吧。

cyoeki
cyoeki 回复Marksinoberg: 如果是那样的话不就访问不到servlet了么?
接近 2 年之前 回复
Marksinoberg
Marksinoberg 回复cyoeki: 应该是没有按照你的web.xml中的配置来写吧
接近 2 年之前 回复
Marksinoberg
Marksinoberg 回复cyoeki: http://blog.csdn.net/Marksinoberg/article/details/52141448?locationNum=2
接近 2 年之前 回复
cyoeki
cyoeki 这几个状态倒是清楚,但是还是不知道问题出在哪……
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ajax中xmlhttp.readyState==4 && xmlhttp.status==200 是什么意思
xmlhttp.readyState的值及解释: 0:请求未初始化(还没有调用 open())。 1:请求已经建立,但是还没有发送(还没有调用 send())。 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。 3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。 4:响应已完成;您可以获取并使用服务器的响应了。 xmlhttp.status的值及解释:
Ajax readyState一直为1或无法请求到后台的问题处理
1、问题及背景描述 最近重温ajax,之前粗略的了解和会用,没有详细的了解过Ajax的一些技术要点。计划在SpringMVC框架下,写三种Ajax代码的方式:①get请求②post请求③Jquery。当完成get请求的方式后,采用post请求写代码时,发现xmlHttp.readyState一直为1,且无法访问到后台。 2、解决过程 通过排查js代码,发现post请求写法没有问题,详
AJAX问题之XMLHttpRequest.status = 0&&XMLHttpRequest.readyState=1
这几天看ajax,发现个问题,XMLHttpRequest对象的readyState一直=1,status =0。 问题是这样的,一开始执行不下去,FF又没有提示错误,并且没有W3C上实例提示的onreadystatechange按步骤触发,不知道是哪的问题,加了alert()测试,一直显示XMLHttpRequest对象的readyState一直==1,status ==0,后来再加if (x
xmlHttp的readyState 和 status参数详解
AJAX中有检查状态码的,xmlHttp.onreadystatechange=handleStateChange; function handleStateChange() {  if(xmlHttp.readyState==4)  {   if(xmlHttp.status==200)   {    parseResults(); //解析返回值   }  } }  r
关于xmlhttp.readyState=0的问题,老是返回0,怎么办?
做练习发现 state老是是0 原来是这个多了个括号就是指他是执行结果了。而不是一次赋值。。 应该删除();
readyState状态值始终为1的解决办法
最近在研究ajax技术的过程中遇到了一个奇怪的问题:req.readyState的值是始终为1,很纳闷,后来在网上查了下资料,就是在调用函数的时候不能带任何参数,使用()都不行。以下是找到的一篇关于此问题的解读文章!   readyState状态值始终为1的解决办法 200
XMLHttpRequest.onreadystatechange.readyState一直是1解决的一些方法
关于XMLHttpRequest对象触发了onreadystatechange后返回的状态readyState一直都是1的一些解决方法。 先贴上一些出错的相关代码: function createXMLHttpRequest() { if (window.XMLHttpRequest) { // Mozilla xhr = new XMLHttpRequest(); } els
AJAX中xmlhttp.readyState==4 && xmlhttp.status==200是什么意思
AJAX中xmlhttp.readyState==4 && xmlhttp.status==200是什么意思
关于ajax中readyState的值一直为1的问题
具体代码就不贴了, request.open("POST","http://localhost:8080/StudentManage/MyServlet",true); 一开始使用异步请求连接servlet,但是发现servlet的确接收到数据了,但是客户端ajax的readystate一直是1,而且跳了2次1之后就没消息了 伴随另一个表现就是偶尔几次发现也能正确运行 百度很多种:可能是没
什么是Ajax?和ajax中xmlhttp.readyState==4 && xmlhttp.status==200 是什么意思?
    新手上路,请多指教,做毕设之前我也不是很清楚这到底是个啥,而且从来没听说过,阿贾克斯???武器大师贾克斯???哈哈哈哈,不多说,经过长时间的翻阅,大概懂了一点,分享给大家下,有错误喷就行。。。   我看的这哥的博客理解的:https://blog.csdn.net/jiuqiyuliang/article/details/384253391.可以不用刷新网页就可以知道你的数据库中的信息有没...