JSFiddle - React, Tailwind, and code Playground

JavaScript

/**
 * Получение базовой информации с сервера.
 * 
 * @param {object}   [o]           Объект с аргументами AJAX:
 * {
 *  @param {string}  [type='POST'] POST/GET.
 *  @param {string}  [url='']      Адрес для запроса.
 *  @param {object}  [data={}]     Данные, отправляемые на сервер.
 * }
 * @param {int}      [t]           Количество повторных попыток.
 * @param {function} [c(jsonapi)]  Анонимная функция при успехе.
 */
MyClass.prototype.getBaseContents = function(o, t = 5, c = function(jsonapi){}) {
    $.ajax({
        type:      o.type || 'GET',
        dataType: "json",
        url:       o.url  || '',
        data:      o.data || {},
        context: MyClass.prototype,
        success: function(jsonapi) {
            switch (jsonapi.data.meta) {
                case 'imeta':
                    this[jsonapi.data.meta] = jsonapi.data.values;
                    break;
            }
            c(jsonapi);
        },
        error: function(XMLHttpRequest) {
            if (t-- > 0 
             && XMLHttpRequest.status != 404
             // еще статусы
            ) {
             // повтор через 2 секунды...
                setTimeout(function(){
                    MyClass.prototype.getBaseContents(o, t, c);
                }, 2000);
            } else {
                MyClass.prototype.myErrorHandler(
                    XMLHttpRequest.status,
                    XMLHttpRequest.responseText
                );
            }
        }
    });
}