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 相关文章推荐
Firebug 字幕文件JSON地址获取代码
Oct 28 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
JS图片自动轮换效果实现思路附截图
Apr 30 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
jQuery中:gt选择器用法实例
Dec 29 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
javascript中的try catch异常捕获机制用法分析
Dec 14 Javascript
微信小程序用户自定义模版用法实例分析
Nov 28 Javascript
一文看懂如何简单实现节流函数和防抖函数
Sep 05 Javascript
Vue移动端实现图片上传及超过1M压缩上传
Dec 23 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
Vue组件间数据传递的方式(3种)
Jul 13 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程序中防止盗链
2008/04/09 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
浅谈php扩展imagick
2014/06/02 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Python 描述符(Descriptor)入门
2016/11/20 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
国际花店:Pickup Flowers
2020/04/10 全球购物
售后专员岗位职责
2013/12/08 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
庆元旦广播稿
2014/02/10 职场文书
实习协议书范本
2014/04/22 职场文书
环保建议书600字
2014/05/14 职场文书
个人自我剖析材料
2014/09/30 职场文书
行政助理岗位职责
2015/02/10 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
《植树问题》教学反思
2016/03/03 职场文书