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 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
Feb 05 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
jquery制作搜狐快站页面效果示例分享
Feb 21 Javascript
深入理解javascript原型链和继承
Sep 23 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
Mar 09 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
PHP二维数组去重算法
2016/12/17 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
python检测某个变量是否有定义的方法
2015/05/20 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python实现微信好友的数据分析
2019/12/16 Python
详解python itertools功能
2020/02/07 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书