首页 > 学院 > 开发设计 > 正文

My ajaxwrapper tool

2019-11-15 02:28:07
字体:
来源:转载
供稿:网友

My Ajaxwrapper tool

Until recently, when I write ajax call, always write like below:

$.ajax({                type: "post",                datatype: "json",                url: "someurl",                success: function (data) {                    //some logic                }});

and repeat everywhere... Until some day: so much redundant code!

Fournately, the "ajaxwrapper" tool can resolve this PRoblem. ^.^

By using "ajaxwrapper", the code will be changed like this:

a2d.core.ajax.ajaxwrapper("ajaxDefinationId", { userId: 100 }, function(result){   //some logic}).call();

I believe you'v found something missed--> we should define "ajaxDefinationId" first, like below:

a2d.core.ajax.ajaxwrapper.setup.add({ id: "ajaxDefinationId", method: "post", url: "testurl.aspx" });//we may extend here, add much more parameters like headers, etags, cache, etc...

Explain- core code:

a2d.core.ajax.ajaxwrapper = function (id, data, callback) {    var defaultConfig = {        id: null,        data: null,        callback: null    };    var realConfig = $.extend(defaultConfig, { id: id, data: data, callback: callback });    var setupConfig = a2d.core.ajax.ajaxwrapper.setup.find(realConfig.id);    var ajaxCall = function () {        $.ajax({            url: setupConfig.url,            type: setupConfig.method,            async: true,            cache: false,            data: realConfig.data,            dataType: "json",            success: realConfig.callback,            error: a2d.core.exception.service.takeoverFunction(function () { throw new kxtx.core.exception("ajax error"); })        });    }    return {        call: ajaxCall    };};

Code is simple. First, it search ajax's global defination & current definatio, and then invoke jquery's ajax method.

Let's look error handler:a2d.core.exception.service.takeoverFunction, this function can add a wrapper on a function. When an error throw in function, takeoverFunction will catch it, and process it. See below:

a2d.core.exception.service.takeoverFunction = function (fn) {    var newHandler = function () {        try {            fn.call(fn, arguments[0],                                                        arguments[1],                                                        arguments[2],                                                        arguments[3],                                                        arguments[4],                                                        arguments[5],                                                        arguments[6],                                                        arguments[7],                                                        arguments[8],                                                        arguments[9],                                                        arguments[10]);        }        catch (ex) {            if (ex instanceof a2d.core.exception) {                a2d.core.events.service.publish("a2d.core.exception:occurred", ex);            }            else {                alert("未知exception类型");            }        }    };    return newHandler;}

Code is still simple. Core code is "try/catch"-->a2d.core.events.service.publish("a2d.core.exception:occurred", ex);

AhHa, finally, we found the error was published by a2d framework. Depend on this mechanism, the concrete impl be decopouled by pub/sub pattern, we can subscribe this event flexible.

The tool has been integrated into A2DFramework.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表