Javascript Ajax和readyState
我试图更新ajax请求函数以显示响应的各个状态 但是,在发送请求后,我得到的只是Javascript Ajax和readyState,javascript,jquery,ajax,xmlhttprequest,Javascript,Jquery,Ajax,Xmlhttprequest,我试图更新ajax请求函数以显示响应的各个状态 但是,在发送请求后,我得到的只是readyState=1,然后它直接跳到readyState=4,我从服务器得到完整响应 为什么我得不到readyStates 2和3 当我尝试使用本机浏览器时,例如 xmlhttp2 = new XMLHttpRequest() 发送相同的请求会使我的回调中出现readyStates 1、2、3和4: xmlhttp2.onreadystatechange 但是使用JQuery的ajax助手函数就不能了。为什么
readyState=1
,然后它直接跳到readyState=4
,我从服务器得到完整响应
为什么我得不到readyStates 2和3
当我尝试使用本机浏览器时,例如
xmlhttp2 = new XMLHttpRequest()
发送相同的请求会使我的回调中出现readyStates 1、2、3和4:
xmlhttp2.onreadystatechange
但是使用JQuery的ajax助手函数就不能了。为什么会这样
这是我的密码:
var jqXHR = $.ajax(
{
data: requestForm, //my json request
type: req_type, // could be post or get
url: script, // php script
async: true,
success: function(response,textStatus, xhr)
{
renderIt(response);
},
error: function( xhr, textStatus, errorThrown )
{
var errText = "<b>Error "+xhr.status+" : "+xhr.reponseText+" , "+textStatus+", "+errorThrown+" </b>";
$('#'+div).append(errText);
}
});
jqXHR.fail(function( data, textStatus, jqXHR )
{
var errText = "<b>Error "+jqXHR.status+" : "+jqXHR.reponseText+" , "+textStatus+", "+" </b>";
$('#'+div).html(errText);
});
switch(jqXHR.readyState)
{
case 1:
$('#'+div).html("\n<center> Connected to Server...<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
break;
case 2:
$('#'+div).html("\n<center> Request Recieved...<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
break;
case 3:
$('#'+div).html("\n<center> Receiving Responses.....<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
$('#'+div).append(xhr.responseText);
break;
default:
$('#'+div).html("\n<center> Awaiting Results.."+jqXHR.readyState+"<br/> <img src='images/loading.gif' height=30 width=30></center>\n");
break;
}
var jqXHR=$.ajax(
{
数据:requestForm,//我的json请求
type:req\u type,//可以是post或get
url:script,//php脚本
async:true,
成功:函数(响应、文本状态、xhr)
{
反应;
},
错误:函数(xhr、textStatus、errorshown)
{
var errText=“Error”+xhr.status+:“+xhr.reponseText+”、“+textStatus+”、“+errorshown+”;
$('#'+div).append(errText);
}
});
失败(函数(数据、文本状态、jqXHR)
{
var errText=“Error”+jqXHR.status+”:“+jqXHR.reponseText+”、“+textStatus+”、“+”;
$('#'+div).html(errText);
});
开关(jqXHR.readyState)
{
案例1:
$('#'+div.html(“\n已连接到服务器…
\n”);
打破
案例2:
$('#'+div.html(“\n已收到请求…
\n”);
打破
案例3:
$('#'+div.html(“\n接收响应…..
\n”);
$('#'+div).append(xhr.responseText);
打破
违约:
$(“#”+div.html(“\n等待结果…”+jqXHR.readyState+”
\n”);
打破
}
在jQuery中只能得到1和4,因为它的成功回调仅在ajax请求完成后触发,并且
因此,如果出于某种原因需要对该事件进行处理,则需要直接使用XMLHttpRequest。您意识到switch语句只执行一次,对吗?您是对的!如何绑定由readyState更改触发的开关代码?使用readystatechange事件?但是请注意,这不需要使用jQuery的ajax方法。使用jQuery可以实现这一点,但这充其量只是一种黑客行为。您需要为返回xhr的xhr选项提供回调,然后在返回xhr之前绑定到该xhr上的onreadystatechange事件。我可能错了,但我认为.onreadystatechange()不适用于基于此文档的jqXHR对象基于此答案,我想我必须放弃进行此更改的努力。我之所以开始这样做,是因为一些请求在处理完成之前收到了几块数据,我想向等待的用户显示状态。