четверг, 23 ноября 2017 г.

Абстракция для выполнения запросов к серверу jquery

Для выполнения запросов на сервер на мой взгляд лучше сразу ввести хоть какой-нибудь слой абстракции, но не использовать стандартный $.ajax метод jquery.
В моем случае я использую вот такой объект:
ServerSinchronizator = {
    endPoints: {
        "common": "/json/"
    },
    availableActions: {
        "data":           { method: "GET",  url: ""                        },
        "userLogin":      { method: "POST", url: "?action=login"           },
        "useBonuses":     { method: "POST", url: "?action=use_bonus"       },
        "useCertificate": { method: "POST", url: "?action=use_certificate" },
        "sendOrder":      { method: "POST", url: "?action=new_order"       },
        "cartAdd":        { method: "POST", url: "?action=add"             },
        "cartUpdate":     { method: "POST", url: "?action=update"          },
        "cartRemove":     { method: "POST", url: "?action=delete"          },
    },
    cachedHandlers: [],

    initialize: function() {},

    do: function(endPoint, config) {
        var url = '',
            action = '',
            cached,
            data = {},
            success = function() {},
            fail = function() {};
        if (typeof this.endPoints[endPoint] === 'undefined') {
            throw new Error("No point" + endPoint);
        }
        url = this.endPoints[endPoint];
        if (typeof config['action'] === 'undefined') {
            throw new Error("Unknown action");
        }
        action = this.availableActions[config['action']];
        if (typeof action === 'undefined') {
            throw new Error("Unknown action");
        }
        if (typeof config['data'] !== 'undefined') {
            data = config['data'];
        }
        if (typeof config['success'] !== 'undefined') {
            success = config['success'];
        }
        if (typeof config['fail'] !== 'undefined') {
            fail = config['fail'];
        }
        cached = typeof config['fromCache'] !== 'undefined';
        if (cached) {
            this.cachedHandlers.push({
                "action": config["action"],
                "callBack": success
            });
            return;
        }
        $.ajax({
            type: action["method"],
            url: url + action["url"],
            data: data,
            dataType: "html"
        }).done(function( _data ) {
            success(_data);
            ServerSinchronizator.doCachedHandlersFor(config['action'], _data);
        }).fail(function( _data ) {
            fail(_data);
        });
    },

    doCachedHandlersFor: function(action, data) {
        var curHanlder, call;
        for(var handler in this.cachedHandlers) {
            if (this.cachedHandlers.hasOwnProperty(handler)) {
                curHanlder = this.cachedHandlers[handler];
                if (curHanlder["action"] === action) {
                    call = curHanlder["callBack"];
                    call(data);
                }
            }
        }
    },

    getFromCache: function(action) {
        if (typeof this.cachedData[action] !== 'undefined') {
            return this.cachedData[action];
        }
        return false;
    },
};
Обращаться к серверу через этот объект можно вот таким образом:
ServerSynchronizator.do("common", {
    action: "userLogin",
    data: {hello: "world"},
    success: function(data) {
        console.log(data);
    },
    fail: function(data) {
        conosle.log(data);
    }    
});

Комментариев нет:

Отправить комментарий

Mysql настройка режима

Для настройки режима mysql не обязательно править конфиги можно выполнить команду mysql > set global sql_mode = 'STRICT_TRANS_TAB...