jQuery.post()にいくつかの追加機能を提供したいと思います。サーバーからの応答を確認し、さまざまなコールバックを呼び出せるようにしたい。
例えば:
$("#frmFoo").postForm("ajax")
.start(function () { showSpinner(); })
.success(function () { alert ("Foo saved"); })
.error(function() { alert ("Foo could not be saved at this time"); })
.validationError(function() { alert("Please fix foo and try again"); })
.complete(function() { hideSpinner(); });
そのため、一貫性のあるJSONオブジェクトをページに送り返し、そのJSONオブジェクトに基づいてsuccessまたはvalidationErrorを呼び出し、validationErrorに追加情報を提供できるようにしたいと考えています。
更新 それは急な学習曲線であり、私は何か間違ったことをしたとほぼ100%確信しています。以下は、私が望んでいた機能の試みです。
(function ($) {
$.fn.postForm = function (url) {
var options = options || {};
var formData = this.serialize();
var validationCb = jQuery.Callbacks("once memory");
var successCb = jQuery.Callbacks("once memory");
var errorCb = jQuery.Callbacks("once memory");
var completeCb = jQuery.Callbacks("once memory");
var s = jQuery.ajaxSetup({ }, options);
var callbackContext = s.context || s;
foo = {
success: function () {
successCb.add(arguments[0]);
return this;
},
complete: function() {
completeCb.add(arguments[0]);
return this;
},
validationError : function() {
validationCb.add(arguments[0]);
return this;
},
error: function() {
errorCb.add(arguments[0]);
return this;
}
};
$.post(url, formData)
.success(function(data, textStatus, jqXhr) {
if (!data.Success) {
validationCb.fireWith(callbackContext, [data.Message, data.KeyValuePairs]);
} else {
successCb.fireWith(callbackContext, [data, textStatus, jqXhr]);
}
})
.complete(function (jqXhr, textStatus) {
completeCb.fireWith(callbackContext, [jqXhr, textStatus]);
})
.error(function(jqXhr, textStatus, errorThrown) {
errorCb.fireWith(callbackContext, [jqXhr, textStatus, errorThrown]);
});
return foo;
};
})(jQuery);
それで、私がしたことはどれほど悪いですか?私はjavascriptとjQueryに精通しておらず、私を噛むことになっているいくつかのルールを破っていると確信しています。