为什么.ajax总是成功处理?

时间:2009-12-11 19:04:32

标签: javascript jquery ajax

我使用了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?为什么总是去成功处理程序?

2 个答案:

答案 0 :(得分:3)

jQuery的$.ajax函数采用数据类型并尝试使用响应,就像它是该数据类型一样,主要是为了让您在开始使用响应数据时更轻松。但是,这不是jQuery如何使用successerror处理程序定义成功或失败。

在这种情况下,通过从服务器接收信息来定义“成功”。如果服务器收到信息,则请求成功。之后,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>
相关问题