JSFiddle - React, Tailwind, and code Playground
by Ukjin Yang
HTML
<button class="on" value="1">Access default success and fail behavior</button><br><br>
<button class="on" value="0">Prevent default success and fail behavior</button><br><br>
<div id="log"></div>
JavaScript
//util.js
/**
* jQuery.ajax hooking by 양욱진
* 기존: ajax global event는 상시 가장 후발 호출.
* 개선: 새로운 ajax global event 를 통해 이벤트 검증 후 다음 이벤트 진행 여부 확인.
* API: $(document).ajaxBeforeSuccess(function(event, success, statusText, jqXHR){});
* $(document).ajaxBeforeError(function(event, jqXHR, textStatus, errorThrown){});
* 위 API는 기존 $.ajaxSuccess 및 $.ajaxError 사용법과 동일.
* 주의사항: $.deferred 및 Promise 대응 불가. 사용 방법이 클래식이어야 대응 가능. (기존 그대로 사용하면 대응 가능)
*/
!function($){
var apis = {ajax: $.ajax, get: $.get, post: $.post};
for(var api in apis){
$['_'+api+'_'] = apis[api];
if(api == 'ajax') continue;
!function(api, body){
$[api] = function(url, data, callback, type){
if ($.isFunction(data)) {
type = type || callback;
callback = data;
data = undefined;
}
var op = {
url: url,
type: api,
dataType: type,
data: data
};
op.success = function (success, statusText, jqXHR) {
var result = $(document).triggerHandler("ajaxBeforeSuccess", [jqXHR, op, success]);
if(result === undefined || result)
$.isFunction(callback) ? callback.call(this, success, statusText, jqXHR) : 0;
else $.event.global.ajaxSuccess = false;
};
return $._ajax_(op);
};
}(api, apis[api]);
}
$.ajax = function(url, settings){
if(url && !settings) settings = url;
else if(settings) settings.url = url;
$._ajax_($.extend({}, settings || {}, {
success:function(success, statusText, jqXHR){
var result = $(document).triggerHandler("ajaxBeforeSuccess", [jqXHR, settings, success]);
if(result === undefined || result)
$.isFunction(settings.success) ? settings.success.call(this, success, statusText, jqXHR) : 0;
else $.event.global.ajaxSuccess = false;
},error: function(jqXHR, textStatus, errorThrown){
var result = $(document).triggerHandler("ajaxBeforeError",...