私はAJAXリクエストが次のようなことで成功することを確認しています:
$.post("page.php", {data: stuff}, function(data, status) {
if(status == "success") {
//Code here
}
else {
//Error handling stuff
}
});
ステータス変数をチェックすることは、これを実行するための最良の方法ですか、それともリクエストが実際に通過したことを確認するためのより良い方法がありますか?私は「成功した」リクエストをタイムアウトせずに投稿しているページにヒットするリクエストであると考えています(サーバーがダウンしていて、AJAXリクエストがその直前に行われた場合)例としてダウンしました)、またはあらゆる種類の404または500エラーを返します。
このように_$.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'
});
_
さらに、beforeSend
でXHRヘッダーを変更/読み取るための_$.ajax
_にajaxイベントハンドラーを渡したり、complete
でハンドラーが発生したときにエラー(エラーかどうか)を発生させることができます。リクエストが終了しました。
明示的な成功ハンドラーがあるため、ajax呼び出しを使用することを好みます
$.ajax({
url: "page.php",
data: stuff,
success: function(response){
console.log("success");
}
});
また、firebugまたはwebkitと同様のものを使用することをお勧めします。そうすれば、リクエストを追跡してパラメーターを確認できます。
もちろん、jQueryは、ソースコードのように「成功」と見なします。この場合、ステータスコードが返されないため、ステータスコード404/500もタイムアウトも含まれません。
いつ"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";
...
}
}