Ajax-pushlet-client是pushlet的ajax客户端方式,对该JS进行分析后发现,它是采用了面向对象的javascript技术和充分利用XMLHttpRequest对象来实现的HTTP长连接,达到了服务器“推”技术。

1、属性
NV_P_FORMAT: ‘p_format=xml-strict’,//数据格式,默认是严格严格XML
NV_P_MODE: ‘p_mode=pull’, //pushlet采用的模式,默认为pull模式
pushletURL: null,//请求URL地址
webRoot: null,//项目根路径
sessionId: null,//sessionId
STATE_ERROR: -2,//一些状态常量
STATE_ABORT: -1,
STATE_NULL: 1,
STATE_READY: 2,
STATE_JOINED: 3,
STATE_LISTENING: 3,
state: 1,//状态

statusMsg: ‘null’, //状态消息
statusChanged: false,//状态是否发生了改变
statusChar: ‘|’,//状态分隔符

2、方法
_init:获取XMLHttpRequest对象
设定pushlet的请求URL
将状态置为STATE_READY.

_doRequest (anEvent, aQuery):首先判断是不是出现错误,然后再判断是否需要等待状态,若不需要等待则构建查询字符串。最后调用_getXML(url, PL._onResponse)方法向服务器发出请求,后一个参数为回调方法。

_getWebRoot:获取项目根目录,可以根据实际项目修改

_getXML:以get方式请求URL,用同步或者异步方式

_onResponse(xml):先将xml转变为pushlet事件对象(_rsp2Events),得到多个PushletEvent对象,再调用_onEvent()处理每个事件。

_rsp2Events(xml):取得事件标签(event),然后调用PushletEvent(),可能得到多个PushletEvent对象。

_onEvent(event):处理由服务器端传来的事件,首先判断事件类型,由不同的类型调用不同的处理方法:
Data:调用_doCallback(event, window.onData),方法处理。onData是自定义;
Refresh:从event中取得刷新时间,然后调用_doRequest(‘refresh’)刷新;
Error:将state置为STATE_ERROR,获取错误原因,调用_doCallback(event, window.onError);
join-ack:将状态置为” STATE_JOINED”,取得sessionId,调用_doCallback(event, window.onJoinAck);
join-listen-ack:将state设为STATE_LISTENING,取得sessionId,调用_doCallback(event, window.onJoinListenAck);
listen-ack、hb、hb-ack、leave-ack、refresh-ack、subscribe-ack、unsubscribe-ack、abort、/nack$/等类型也类似。

_addEvent(elm, evType, callback, useCapture):取得elm对象,调用以下三者之一:
obj.addEventListener(evType, callback, useCapture);
obj.attachEvent(‘on’ + evType, callback);
obj[‘on’ + evType] = callback。
当ajax-pushlet-client.js初始化时调用了该方法:PL._addEvent(window, ‘load’, PL._init, false);即初始化时相当于:window.οnlοad=PL._init();

_doCallback(event,cbFunction):如果指定了回调方法,则调用cbFunction(event),如果没有指定那么调用window.onEvent(event)。

_getObject(obj):获取对象引用,若参数为对象直接返回该对象引用,若为字符串则按ID取得该对象。

PushletEvent(XML):与nl.justobjects.pushlet.Event相对应。其内部方法或属性如下:
Arr:数组,用于存放链值对;
getSubject():取得p_subject标签值;
getEvent():取得p_event标签值;
put(name, value);将链值对放入arr中;
get(name):按链取得值;
toString:转换为链值对字符串;
toTable:转换为表格;

将传入xml解析到arr中。

其对外公开方法:
heartbeat():实质是调用了PL._doRequest(‘hb’),向后台请求“hb”事件。再被封装成了:p_heartbeat()精简方式。
相似的方法还有:
Join:_doRequest(‘join’, PL.NV_P_FORMAT + ‘&’ + PL.NV_P_MODE);
joinListen:PL._doRequest(‘join-listen’, query);请求加入同时监听;
leave:_doRequest(‘leave’);
listen(aSubject):_doRequest(‘listen’, query);按主题监听;
publish(aSubject, theQueryArgs):_doRequest(‘publish’, query);按主题发布;
subscribe(aSubject, aLabel):_doRequest(‘subscribe’, query);按主题订阅;
unsubscribe(aSubscriptionId):_doRequest(‘unsubscribe’, query);按订阅ID退订;

Pushlet的Ajax-pushlet-client.js分析相关推荐

  1. Pushlet 2.0.3 源码分析

    转载地址:http://blog.csdn.net/yxw246/article/details/2418255 Pushlet 2.0.3 源码分析 ----服务器端 1 总体架构 Pushlet从 ...

  2. ajax结合java,ajax技术应用详细分析(后端java与客户端请求的结合)

    Ajax 技术应用 先回看 模态框的使用 js比较薄弱 如上 比如这部分 加粗样式 如下 是BOM窗口对象 ** js最薄弱 建议在浏览器练习 ** confirm方法 跳转练习 新疑问:怎么分辨js ...

  3. 【WebGoat习题解析】AJAX Security-Insecure Client Storage

    绕过前端验证可以通过两种办法:一是利用开发者工具进行debug:二是利用burpsuite直接抓取.本题解决思路如下: STAGE 1: For this exercise, your mission ...

  4. ajax所需的js文件,ajax 需要的js文件

    ajax 需要的js文件 内容精选 换一换 在高级页面组件开发过程中,平台支持开发者通过引用第三方库的方式在降低组件开发的复杂度的同时丰富组件的功能.因此,库是支撑高级页面组件运行的第三方依赖,若缺少 ...

  5. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

  6. JQuery Ajax 与 Knockout.js的结合

    项目中遇到太多JQuery Ajax 与 Knockout.js的结合来处理数据的情况,今天将这部分内容梳理一下.一来弄清楚二者结合处理数据的流程,二来是感觉二者结合在一起用的时候有点将二者搞混了,弄 ...

  7. Ajax框架及原理分析--视频

    Ajax框架及原理分析 下载地址:http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240576 AJ ...

  8. AJAX初识(原生JS版AJAX和Jquery版AJAX)

    一.什么是JSON 1.介绍JSON独立于语言,是一种与语言无关的数据格式.JSON指的是JavaScript对象表示法(JavaScript Object Notation)JSON是轻量级的文本数 ...

  9. [JS 分析] 天_眼_查 字体文件

    0. 参考 js分析 猫_眼_电_影 字体文件 @font-face 1. 分析 1.1 定位目标元素 1.2 查看网页源代码 1.3 requests 请求提取得到大量错误信息 对比猫_眼_电_影抓 ...

最新文章

  1. JavaScript语言基础12
  2. 数据结构与算法学习-开篇
  3. 8、使用SELECTI...INTO OUTFILE导出表数据
  4. 【深度学习】动漫风格迁移AnimeGANv2,发布线上运行Demo
  5. selenium 翻页_利用selenium实现自动翻页爬取某鱼数据
  6. 微软开源 MS-DOS 1.25 和 MS-DOS 2.0
  7. python统计英文句子每个单词字数_Python小书3-文本英文单词统计
  8. mysql 连续签到天数_最大连续签到天数-sql
  9. synchronized使用和原理全解
  10. (转载)vmware workstation14永久激活密钥分享
  11. python将pdf转换图片
  12. python导入数据画折线图_Python学习第93课-导入csv数据并绘制折线图
  13. 用计算机说我爱你怎么能,让电脑替你说我爱你 520科技宅花式告白技巧 (全文)...
  14. Web前端期末大作业--中国港珠澳大桥网页设计(HTML+CSS+JavaScript)实现
  15. Windows系统资源监控工具perfmon-只能查看报告。
  16. 自动化工具之UIAutomator
  17. Pillow透视变换进行图片纠偏
  18. Joint Discriminative and Generative Learning for Person Re-identification
  19. gui设计模式_GUI的完整形式是什么?
  20. MATLAB 在图中插入注释性文字

热门文章

  1. 基于arduino的自动巡轨小车教程(一)电机篇
  2. ARMv7,ARM7,ARMA7有什么区别
  3. WDL 流程语言编写及进阶(标准结构/线性输入输出/默认参数设置/判断语句)
  4. STM32定时器计数频率以及PSC和CNT、CCR1的关系
  5. 树莓派4B安装ubuntu20操作系统以及网络问题
  6. 年底必用!活动复盘“七步成诗法”
  7. 【NX二次开发之用户界面】创建圆柱圆锥
  8. S7-1200控制S120变频器
  9. 网络安全工程师应该具备哪些职业技能?
  10. JavaScript弹出对话框的三种方式