现象:在ajax 中,通过load()方法,明明只发送了一遍的post 请求,调用了一个处理方法。
function load()
{
var url = "";
var xml="";
url = "../worker/worker_dutyrecord_start.do?curDate=" + new Date().getTime();
createXMLHttpRequest();
xmlHttp.open( "post", url, true );
xmlHttp.onreadystatechange = build1;
xmlHttp.setRequestHeader( "Content-Type", requestHeader_urlencoded );
xmlHttp.send( xml )
}
function build1()
{
//直接写处理的方法。
}
结果:build1,被调用了4次。既 xmlHttp.onreadystatechange 执行了四次。
原因:XMLHTTPREQUES会返回5种不同的状态,客户端接受每个状态。
5种请求:
0(uninitialized,未初始化):对象已经创建,但还没有调用open()方法;
1(loading,载入中):open()方法已经调用,但请求还没有发送;
2(loaded,已载入):请求已经发送;
3(interactive,交互中):已经接收到部分响应;
4(complete,完成):所有数据都已经收到,连接已经关闭。
5中响应:
200(OK):找到了该资源,并且一切正常;
304(NOT MODIFIED):该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制;
401(UNAUTHORIZED):客户端无权访问该资源。这通常会使得浏览器要求输入用户名和密码,以登录到服务器;
403(FORBIDDEN):客户端未能获得授权。这通常是在401之后输入了不正确的用户名和密码;
404(NOT FOUND):在指定的位置不存在所申请的资源。(这估计是我们碰到最多的问题)
解决方案:(改写build1方法)
function build1()
{
if( xmlHttp.readyState == 4 )
{
if( xmlHttp.status == 200 )
{
//直接写处理的方法。
}
}
}
这样就可以解决出现的返回多变结果的问题。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。