私は返すことができる{status: ok}
、または{status: error}
他のデータと一緒に ajax 呼び出しを行っています。
.then(doneFilter)
メンバーをチェックしてstatus
から、ステータスが OK の場合にのみ Deferred が解決されるように変更したいと思います。
その構文がわかりません。誰かが私に例を書いてもらえますか?
私は返すことができる{status: ok}
、または{status: error}
他のデータと一緒に ajax 呼び出しを行っています。
.then(doneFilter)
メンバーをチェックしてstatus
から、ステータスが OK の場合にのみ Deferred が解決されるように変更したいと思います。
その構文がわかりません。誰かが私に例を書いてもらえますか?
典型的な例を次に示します。
/* Returns a deferred object. It is resolved if the ajax call succeeded, and
is rejected otherwise.
*/
function doAjaxThing() {
var df = $.Deferred();
$.ajax('http://someurl.org/path/whatever').done( function(data) {
if('test for success here')
df.resolve();
else
df.reject();
}).fail( function() {
df.reject();
});
return df;
}
doAjaxThing().then(
function() { 'success!'; },
function() { 'failure.'; }
);
成功事例だけでなく、失敗事例にも対応することが重要です。また、ajax 呼び出しが失敗する可能性のある 2 つの方法があります。リクエストが返される{status: error}
か、何らかのサーバー エラーが原因でリクエスト自体が失敗するかのいずれかです。
他のオプションも利用できます。解決/拒否呼び出しからハンドラーにデータを渡すことができます。acceptWith()
andを使用しrejectWith()
て、コンテキスト (this
オブジェクト) をハンドラーに渡すこともできます。
遅延オブジェクトのドキュメントをまだ読んでいない場合は、読むことをお勧めします。
戻り状態に基づいてさまざまなコールバックをトリガーするために、ajax deferred 自体を変更したいと思います。Promise
オブジェクトは一度しか解決できないため、できません。この例を見てください:
var fai = $.Deferred();
fai.then(function () {
fai.reject();
console.log(fai.state());
}).done(function () {
console.log(fai.state());
});
fai.resove();
http://jsfiddle.net/ExplosionPIlls/QreYY/
イベントのチェーンは を呼び出し.resolve
、次に.then
コールバックです。 .then
を呼び出します.reject
。ただし、これを実行すると、.reject
呼び出し後の状態がまだ「解決済み」であり、.done
コールバックがトリガーされることがわかります。
つまり、 ajax リクエストが成功した場合、それはすでに.resolved
状態に設定されており、元に戻すことはできません。
代わりに、次のようなことを行うことができます。とにかく簡単だと思います。
$.ajax(...).done(function (json) {
if (json && json.status == 'ok') {
//handle success right here
}
else {
//handle failure right here
}
});