JavaScript结合AJAX_stream实现流式显示


Posted in Javascript onJanuary 08, 2015

当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了。

流式实现

原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传送完成,就取消定时器。

function ajax_stream(url,data,element) {

    var xmlHttp=null;

    if (window.XMLHttpRequest)

      {// code for IE7, Firefox, Opera, etc.

      xmlHttp=new XMLHttpRequest();

      }

    else if (window.ActiveXObject)

      {// code for IE6, IE5

      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

      }

    if (xmlHttp==null)

      {

      alert("Your browser does not support XMLHTTP.");

      element.val('Your browser does not support XMLHTTP. Click the LOG link to monitor the procedure.');

      return 0;

      }

    var xhr = xmlHttp;

    xhr.open('POST', url, true);

    // 如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    xhr.send(data);

    var timer;

    timer = window.setInterval(function() {

        if (xhr.readyState == XMLHttpRequest.DONE) {

            window.clearTimeout(timer);

        }

        element.val(xhr.responseText);

    }, 1000);

}

post数据转换

由于标准实现中的send只能接受以下几种输入,所以需要提前对需要传递的数据对象转换为字符串或者FormData格式,这一点就不如JQuery的方便了,但是JQuery如何在传输中间实现事件响应还不得而知,所以不能用,再或者把所有的对象转换中JSON。

void send();

void send(ArrayBuffer data);

void send(Blob data);

void send(Document data);

void send(DOMString? data);

void send(FormData data);

下面是转换的代码,如果浏览器支持FormData就转换,否则转成字符串。

function ajax_generate_data(jsobj) {

    var i;

    if (window.FormData) {

        var data = new FormData();

        for i in jsobj {

            data.append(i,jsobj[i]);

        }

    } else {

        var data = '';

        var datas = [];

        for i in jsobj {

            // for the values so that possible & contained in the strings do not break the format

            var value = encodeURIComponent(jsobj[i]);

            datas.append(i + '=' + value);

        }

        data = datas.join('&')

    }

    console.log(data);

    return data;

}
Javascript 相关文章推荐
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
JavaScript删除数组元素的方法
Mar 20 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
Jul 09 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
解决vue中el-tab-pane切换的问题
Jul 19 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 Javascript
Vue中computed和watch有哪些区别
Dec 19 Vue.js
jQuery中siblings()方法用法实例
Jan 08 #Javascript
推荐5 个常用的JavaScript调试技巧
Jan 08 #Javascript
jQuery中prevUntil()方法用法实例
Jan 08 #Javascript
jQuery中prevAll()方法用法实例
Jan 08 #Javascript
jQuery中prev()方法用法实例
Jan 08 #Javascript
深入探密Javascript数组方法
Jan 08 #Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
Jan 07 #Javascript
You might like
Zend Framework前端控制器用法示例
2016/12/11 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
javascript 获取图片颜色
2009/04/05 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
想学python 这5本书籍你必看!
2018/12/11 Python
numpy.where() 用法详解
2019/05/27 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
python线程池如何使用
2020/05/28 Python
Python字符串及文本模式方法详解
2020/09/10 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
品德与社会教学反思
2016/02/24 职场文书
创业计划书之烤红薯
2019/09/26 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python