高手帮忙?Ajax中readyState的问题?

showlee2008 2009-08-27 03:51:19
不知道是ajax写的有问题还是浏览器的问题,在有些机子上就是好的,但是在IE8上运行起来就有问题:readyState的状态码总是返回1,不能正常返回状态码4。
具体代码如下:
var http_request = false; //创建对象实例失败的变量
var currentResult = null; //存放服务器返回请求响应文本的变量,html的对象元素
var reponseData = null; //存放服务器返回请求响应数据的变量

//初始化函数
function createXMLHttpRequest(){
http_request = false;
//开始初始化XMLHttpRequest 对象
if(window.XMLHttpRequest) { //Mozilla 浏览器
try{
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {//设置MiME 类别
http_request.overrideMimeType("text/xml");
}
}catch(e){ http_request = false; }
}
else if (window.ActiveXObject) { // IE 浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP"); //较新版本的 Microsoft 浏览器
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP"); //较老版本的 Microsoft 浏览器
} catch (e) { http_request = false; }
}
}
return http_request;
}

//指定处理函数、发送请求的函数
function send_request(url,asynch,reqData) {
//调用初始化函数
http_request = createXMLHttpRequest();
if (!http_request) { // 异常,创建对象实例失败
window.alert("不能创建XMLHttpRequest 对象实例.");
return false;
}

http_request.onreadystatechange = processRequest;

http_request.open("POST", url, asynch);

http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//发送请求
http_request.send(reqData);

if(!(reponseData==null || reponseData=="")){
return reponseData;
}
}

// 处理返回信息的函数
function processRequest() {
if (http_request.readyState == 4) { // 判断对象状态
if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
//获得服务器的响应

reponseData = trim(http_request.responseText);//去空格

if(!(currentResult == null || currentResult == "")){
document.getElementById(currentResult).value = reponseData;
}else{//如果没有显示返回结果的地方
//alert(reponseData);
}
} else{ //页面不正常
alert("您所请求的页面有异常。"+"Error: status code is " + http_request.status);
}
}
}



【说明】1. send_request(url,asynch,reqData)中的asynch 的值为true,reqData为传入参数
【问题】在函数send_request(url,asynch,reqData)中,发送数据后得到的responseText的内容,第一次都是null,状态码返回为1,在第二次调用该AJAX的时候就没有问题。我自己再http_request.send(reqData);后面加上alert(reponseData)后,弹出的alert()点击确定后就可以获取到返回的信息。
请各位大虾多多帮助解决问题!谢谢!
...全文
260 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq382263361 2009-09-03
  • 打赏
  • 举报
回复
学习学习
ckpbed 2009-09-03
  • 打赏
  • 举报
回复
嗯学习,关于异步问题确实是这样。

其实在跟踪的时候可以看到执行情况。建议用firefox或者ie8 单步跟踪一下,会发现异步调用,并没有立即进入下一步。

确切的说,不再后面加断点是看不到的。
langford 2009-08-27
  • 打赏
  • 举报
回复
楼上的说法正确!!楼主你应该注意下,你是异步发送请求的, http_request.send(reqData); 之后马上去取reponseData是不准确的!!因为这时候服务端可能还没有完全处理完成你的请求!如果你需要像你上面的代码这样做的话!请设置asynch=false
hookee 2009-08-27
  • 打赏
  • 举报
回复
代码中:
//发送请求
http_request.send(reqData);
之后马上去取reponseData,如下
if(!(reponseData==null || reponseData=="")){
return reponseData;
}
因为 请求是异步的,此时回调函数processRequest不一定执行完毕,所以send之后取reponseData可能是null, 应该在回调函数中取reponseData

52,797

社区成员

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

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