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的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
JavaScript编程中容易出BUG的几点小知识
Jan 31 Javascript
jQuery动画与特效详解
Feb 01 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
Jan 18 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
ES6 Set结构的应用实例分析
Jun 26 Javascript
详解使用JWT实现单点登录(完全跨域方案)
Aug 02 Javascript
Vue.js下拉菜单组件使用方法详解
Oct 19 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 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
如何正确理解PHP的错误信息
2006/10/09 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
你对IPv6了解程度
2016/02/09 面试题
什么是属性访问器
2015/10/26 面试题
《寓言两则》教学反思
2014/02/27 职场文书
工程质量承诺书
2014/03/27 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
庆七一宣传标语
2014/10/08 职场文书
第一军规观后感
2015/06/12 职场文书
2016年元旦寄语
2015/08/17 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
Pygame Event事件模块的详细示例
2021/11/17 Python