我使用了 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 使用 success
或 error
处理程序定义成功或失败的方式。
在这种情况下,“成功”是通过从服务器接收信息来定义的。如果服务器收到信息,则请求成功。然后,jQuery 尝试将信息解析为 XML(在您的情况下)。然而,它不是(或者不是您所期望的),因此它不会正确地执行您想要的操作。
使用它,我将重写 success
处理程序来处理来自服务器的 XML 或 HTML 数据,并使用 error
处理程序处理第一个错误,其中服务器已关闭等。
关于javascript - 为什么 .ajax 总是转到成功处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890199/