码迷,mamicode.com
首页 > Web开发 > 详细

调用ajax的一种套路

时间:2017-04-23 15:54:32      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:command   cal   回调   for   为什么   nbsp   bsp   exp   ssi   

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的一种套路

标签:command   cal   回调   for   为什么   nbsp   bsp   exp   ssi   

原文地址:http://www.cnblogs.com/liuyinlei/p/6752634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!