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 相关文章推荐
innerHTML,outerHTML,innerTEXT三者之间的区别
Jan 28 Javascript
用js实现的一个Flash滚动轮换显示图片代码生成器
Mar 14 Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 Javascript
基于OL2实现百度地图ABCD marker的效果
Oct 01 Javascript
Bootstrap每天必学之按钮(Button)插件
Apr 25 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
Jun 17 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
AngularJS实现一次监听多个值发生的变化
Aug 31 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
Oct 24 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
Vue触发input选取文件点击事件操作
Aug 07 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下删除字符串中HTML标签的函数
2008/08/27 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python实现小球弹跳效果
2019/05/10 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Python如何实现机器人聊天
2020/09/10 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
欢迎横幅标语
2014/06/17 职场文书
世博会口号
2014/06/20 职场文书
会计出纳岗位职责
2015/03/31 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
小学信息技术教学反思
2016/02/16 职场文书
PyTorch中permute的使用方法
2022/04/26 Python