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操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
Dec 31 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
May 16 Javascript
JavaScript中对象的不同创建方法
Aug 12 Javascript
JS二叉树的简单实现方法示例
Apr 05 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
Sep 25 Javascript
React路由鉴权的实现方法
Sep 05 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
Sep 20 Javascript
js实现时钟定时器
Mar 26 Javascript
vue el-tree 默认展开第一个节点的实现代码
May 15 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 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的性能
2013/10/30 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
童装店创业计划书
2014/01/09 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
师范生求职自荐信
2014/06/14 职场文书
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
python使用shell脚本创建kafka连接器
2022/04/29 Python