我一直在检查以确保我的AJAX请求成功通过这样做:
$.post("page.php", {data: stuff}, function(data, status) {
if(status == "success") {
//Code here
}
else {
//Error handling stuff
}
});
检查状态变量是执行此操作的最佳方式,还是有更好的方法来确保请求实际执行?我正在考虑一个“成功”的请求是一个请求,它命中我正在成功发布的页面没有超时(如果服务器已经关闭,并且在它作为一个例子之前发出了一个AJAX请求)或者返回任何有点404或500错误。
答案 0 :(得分:30)
通过这种方式调用$.post
,您只会自动通过success handler
函数。
如果请求中的某些内容出错,则此方法甚至无法执行。
要获得更多控制权,请直接使用$.ajax()
,或者传入失败处理程序。这可能看起来像
$.post("page.php", {data: stuff}, function(data, status) {
// we're fine here
}).fail(function(err, status) {
// something went wrong, check err and status
});
使用.ajax()
同样的事情:
$.ajax({
type: 'POST',
url: 'page.php',
data: stuff,
success: function( data ) {
},
error: function(xhr, status, error) {
// check status && error
},
dataType: 'text'
});
您甚至可以将更多ajax事件处理程序传递给$.ajax
,例如beforeSend
来修改/读取XHR标头,或者complete
以便有一个处理程序,当处理器以任何方式触发(错误与否)时请求已经完成。
答案 1 :(得分:2)
我更喜欢使用ajax调用,因为它有一个明确的成功处理程序
$.ajax({
url: "page.php",
data: stuff,
success: function(response){
console.log("success");
}
});
我还建议使用类似的firebug或webkit,然后你可以跟踪请求并检查参数!
答案 2 :(得分:1)
您可以检查确切的返回时间"success"
:
// If successful, handle type chaining
if ( status >= 200 && status < 300 || status === 304 ) {
...
// If not modified
if ( status === 304 ) {
statusText = "notmodified";
...
// If we have data
} else {
try {
...
statusText = "success"; // So: only when status code is in
// the range 200 <= x < 300
...
} catch(e) {
...
statusText = "parsererror";
...
}
}