首页 > 代码库 > 调用ajax的一种套路

调用ajax的一种套路

function n(e) {
    if (exports.emit("pick", "success"),!A) {
        if (e.fields && Array.isArray(e.fields))
            S.ack = e.ack || S.ack,
            e.fields.forEach(function(e) {
                if (w[e.command])
                    w[e.command](e)
            }
            );
        if (!A)
            exports.emit("pick", "response", {
                status: 0,
                bid: S.bid,
                session: S.session,
                seq: S.seq,
                ack: S.ack
            })
    }
}
function r(e) {
    if (exports.emit("pick", "failure"),"offline" == e || "kicked" == e)
        exports.emit("error", "stop");
    else if (!A)
        exports.emit("pick", "response", {
            status: 1,
            bid: S.bid,
            session: S.session,
            seq: S.seq,
            ack: S.ack
        })
}
function o() {
    //超时操作
    exports.emit("pick", "timeout"),
    clearTimeout(y);
    var e = v;
    //  e为发出去的XMLHttpRequest对象
    if (v = null ,e.abort(),!v)
        a() //轮询a();重新去取数据。
}
//为什么要通过i封装一次,原因是提供统一接口。
function i(e, t, i, n, r) {
    if ("function" == typeof i)
        r = n,
        n = i;
    if (e == g.TYPE_HI)
        i = i || {},
        i.session = S.session,
        i.seq = S.seq++;
    //调用ajax,也是对ajax的封装
    return g.get(e, t, i, n, r)
}
function s(e, t) {
    return function() {
        var i = Array.prototype.slice.call(arguments);
        //闭包来判断私有静态变量b与返回的数据进行对比
        if (e === b) {
            //有返回,清除y。
            if (v = null ,clearTimeout(y),"success" == t)
                //调用成功
                n.apply(null , i);
            else
                //调用失败
                r.apply(null , i);
            //A初始时为false
            if (!A)
                setTimeout(function() {
                    a()       
                }
                , 0)
        }
    }
}
function a() {
    if (!v)                            //v初始为NULL
        b++,                           //b初始为0
        v = i(g.TYPE_HI, "pick", {
                imuss: S.bid,
                ucid: S.ucid,
                ack: S.ack || ""
            }, 
            //这里的b传递到回调函数中。
            s(b, "success"), s(b, "failure")),
        //对发出的请求超时监控
        y = setTimeout(o, C.PICK_TIMEOUT)
}

 

调用ajax的一种套路