私のアプリケーションにはAJAX呼び出しが多数あり、それぞれJSON応答を返します。各.done()呼び出しでデータを検証する代わりに、コードをコンパクトにしようとしています。JQuery AJAX - .done()前のフィルタ
我々がこれまで持って何
$.ajax({
url: 'test',
type: 'GET',
data: {
_token: token
},
dataFilter: function(jsonResponse) {
return isValidJson(jsonResponse);
}
}).done(function(jsonResponse) {
// do things
});
isValidJson(jsonResponse) {
try {
var parsedJson = $.parseJSON(jsonResponse);
if (parsedJson.error == 1) {
notificationController.handleNotification(parsedJson.message, 'error');
return false;
}
} catch (err) {
notificationController.handleNotification('A server-side error occured. Try refreshing if the problem persists.', 'error');
return false;
}
return jsonResponse; // Have to return the original data not true
}
予想される動作はdataFilterがfalseを返した場合、それは)それがtrueを返した場合、それは(の.doneしていきます、)(.failをトリガすることです。代わりに、isValidJson()の結果で.done()を継続します。
すべてのAJAX呼び出しの下に置かなくても、ユーザに通知を送信するような、.fail()の標準を実行する方法もありますか?
号「_A機能これは、プレフィルタリングです。応答をサニタイズする機能**あなたは浄化されたデータを返すべきです**。したがって、jsonのチェックがOKであれば、FALSEをTRUEに戻すべきではありません。あなたのストラテジーは間違っています –
@RoyiNamirありがとうございます。 .done()以外のデータをすべてのAJAX呼び出しでフィルタリングする正しい方法を知っていますか?私は何かを拡張するべきですか? –
これは試しましたか?var jxhr = $ .ajax(dataFilter:function(){jxhr.abort()}); ? – Kison