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",...