javascript - 为什么 .ajax 总是转到成功处理程序?

标签 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 文件(由其 header header("Content-type: text/xml") 标识),这就是我的原因将数据类型指定为“xml”;但是,如果失败(例如: session 超时),index.php 会将用户重定向到 login.php。在这种情况下,响应是一些 HTML,.ajax 不应该转到函数 errHandler 吗?为什么它总是转到成功处理程序?

最佳答案

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

在这种情况下,“成功”是通过从服务器接收信息来定义的。如果服务器收到信息,则请求成功。然后,jQuery 尝试将信息解析为 XML(在您的情况下)。然而,它不是(或者不是您所期望的),因此它不会正确地执行您想要的操作。

使用它,我将重写 success 处理程序来处理来自服务器的 XML 或 HTML 数据,并使用 error 处理程序处理第一个错误,其中服务器已关闭等。

关于javascript - 为什么 .ajax 总是转到成功处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890199/

相关文章:

javascript - 添加/删除类在 Chrome 中对我不起作用?

javascript - 从VueJS中的全局事件总线访问事件对象

javascript - 是否可以使用 SCSS 将一个元素的 margin-top 设置为另一个元素高度的 60%?

javascript - 视差不稳定

javascript - Highcharts |图表缩放和跨度 |使用 LMB 进行缩放,使用人民币进行跨度

jquery函数清空表单中的一些元素

javascript - 如何使用 AJAX 发送 POST 数据?以及如何在 Web API 中获取 POST 数据?

javascript - 如何创建一个可以在javascript中返回日期差异的函数?

javascript - 获取 else 语句并将其添加到 AJAX 调用函数(响应)

javascript - 两个单独的$.ajax在点击函数上互相调用 "kill"