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获取php变量的实现代码
Aug 10 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
Jun 12 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
微信小程序使用第三方库Underscore.js步骤详解
Sep 27 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
浅析JS中什么是自定义react数据验证组件
Oct 19 Javascript
vue设置导航栏、侧边栏为公共页面的例子
Nov 01 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 Javascript
js模拟实现烟花特效
Mar 10 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
教你部署vue项目到docker
Apr 05 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如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
Koa代理Http请求的示例代码
2018/10/10 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
三个Unix的命令面试题
2015/04/12 面试题
趣味游戏活动方案
2014/02/07 职场文书
超越自我演讲稿
2014/05/21 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
大学生入党自荐书
2015/03/05 职场文书
研讨会致辞
2015/07/31 职场文书
高一化学教学反思
2016/02/22 职场文书