我使用了jQuery的.ajax
函数,如:
$.ajax({
type:"POST",
url:"./index.php",
data:{ajax_fetch:1,action:"fetch_devInfo",nwType:nw_type,devTSN:dev_tsn,devSTime:dev_sTime,devETime:dev_eTime,dev_gType:dev_graphType},
dataType:"xml",
error:errHandler,
success:function(xml,textStatus)
{
xml_process(xml,textStatus,$("div#cont-Dev"),"Device");
}
});
// function for .ajax error callback
function errHandler(xhr, statusText, error)
{
if (xhr.status == "0" && statusText == "error")
{
$("body").append('<div class="ui-state-error ui-corner-all" id="error">Network down, try again later</div>');
}
else if (xhr.status == "200" && statusText == "parseerror")
{
window.location="./login.php";
}
}
我的假设是:如果.ajax
成功,那么服务器必须返回一个XML文件(由其标题头标识(“Content-type:text / xml”)),这就是为什么我将dataType指定为“XML”;但是,如果失败(例如:会话超时),index.php
会将用户重定向到login.php
。在这种情况下,响应是一些HTML,不应.ajax
转到函数errHandler
?为什么总是去成功处理程序?
答案 0 :(得分:3)
jQuery的$.ajax
函数采用数据类型并尝试使用响应,就像它是该数据类型一样,主要是为了让您在开始使用响应数据时更轻松。但是,这不是jQuery如何使用success
或error
处理程序定义成功或失败。
在这种情况下,通过从服务器接收信息来定义“成功”。如果服务器收到信息,则请求成功。之后,jQuery尝试将信息解析为XML(在您的情况下)。但是,它不是(或不是你所期望的),所以它不会正确地做你想要的。
使用它,我会重写success
处理程序来处理来自服务器的XML或HTML数据,并使用error
处理程序来处理第一个错误,服务器关闭等等。 / p>
答案 1 :(得分:2)
我在jquery文档中看不到明确的答案。但我正在考虑302响应(或其他)的数据是有效的XML数据(因此可以解析),即使HTML并非总是如此。
发现HTTP / 1.1 302
缓存控制:无缓存
保持活跃:超时= 3,最大= 993
Pragma:no-cache
内容类型:text / html;字符集= UTF-8
到期:-1
位置:/Login.aspx
服务器:Microsoft-IIS / 7.0
X-AspNet-Version:2.0.50727
X-Powered-By:ASP.NET
日期:2009年12月11日星期五19:17:27 GMT
内容长度:139
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Login.aspx">here</a>.</h2>
</body></html>