JSFiddle - React, Tailwind, and code Playground

by _nderscore

HTML

<input type="submit" value="Do AJAX" />
<div id="testElement">
    This is the test element which will be updated by ajax.
</div>

JavaScript

/* shim */
mmcore = window.mmcore || {};
/* /shim */

/* mmcore AJAX listeners
 * 
 * Non-jQuery event listeners for XHR requests
 * 2013.12.19 - Jim Herrero
 *
 * mmcore.addPreAjaxListener
 * mmcore.addPostAjaxListener
 *
 * match = url, accepts string or regex
 * func  = function to execute
 */
;(function(){
    if(mmcore._preAjaxListeners) return;

    mmcore._preAjaxListeners = [];
    mmcore._postAjaxListeners = [];
    mmcore._fireAjaxEvents = function(flag, href){
        if (!href) return;
        var arr;
        if (flag == 'pre') arr = mmcore._preAjaxListeners;
        else if (flag == 'post') arr = mmcore._postAjaxListeners;
        else return;
        for(var i = 0, l = arr.length; i < l; i++){
            var x = arr[i];
            if(typeof x.match == 'string' && href == x.match)
                x.handler();
            else if (x.match.test && x.match.test(href))
                x.handler();
        }
    };

    mmcore.addPreAjaxListener = function(match, handler){
        mmcore._preAjaxListeners.push({ match: match, handler: handler });
    };

    mmcore.addPostAjaxListener = function(match, handler){
        mmcore._postAjaxListeners.push({ match: match, handler: handler });
    };

    XMLHttpRequest.prototype.open = (function(orig){
        return function(a,b,c){
            this._mmHref = b;
            return orig.apply(this, arguments);
        };
    })(XMLHttpRequest.prototype.open);

    XMLHttpRequest.prototype.send = (function(orig){
        return function(){
            mmcore._fireAjaxEvents('pre', this._mmHref);

            if (!/MSIE/.test(navigator.userAgent)){
                this.addEventListener("loadend", function(){
                    mmcore._fireAjaxEvents('post', this._mmHref);
                }, false);
            } else {
                var xhr = this,
                waiter = setInterval(function(){
                    if(xhr.readyState && xhr.readyState == 4){
                       ...