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 相关文章推荐
jQuery之选择组件的深入解析
Jun 19 Javascript
js阻止事件追加的具体实现
Oct 15 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
深入学习AngularJS中数据的双向绑定机制
Mar 04 Javascript
BootStrap3学习笔记(一)之网格系统
May 20 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
Sep 20 Javascript
js Canvas绘制圆形时钟教程
Feb 06 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
Mar 03 Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
微信小程序引用iconfont图标的方法
Oct 22 Javascript
JavaScript实现动态生成表格
Aug 02 Javascript
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
PHP生成Gif图片验证码
2013/10/27 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
python获取mp3文件信息的方法
2015/06/15 Python
详解Python中dict与set的使用
2015/08/10 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
毕业生自我鉴定
2013/11/05 职场文书
酒店总经理欢迎词
2014/01/08 职场文书
青春演讲稿范文
2014/05/08 职场文书
最美家庭活动方案
2014/08/31 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
文书工作总结(范文)
2019/07/11 职场文书
Go语言基础知识点介绍
2021/07/04 Golang