Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2397421
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: JavaScript

2014-11-05 18:45:34

当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了。


流式实现


原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传送完成,就取消定时器。
  1. function ajax_stream(url,data,element) {
  2.     var xmlHttp=null;
  3.     if (window.XMLHttpRequest)
  4.       {// code for IE7, Firefox, Opera, etc.
  5.       xmlHttp=new XMLHttpRequest();
  6.       }
  7.     else if (window.ActiveXObject)
  8.       {// code for IE6, IE5
  9.       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  10.       }
  11.     if (xmlHttp==null)
  12.       {
  13.       alert("Your browser does not support XMLHTTP.");
  14.       element.val('Your browser does not support XMLHTTP. Click the LOG link to monitor the procedure.');
  15.       return 0;
  16.       }
  17.     var xhr = xmlHttp;
  18.     xhr.open('POST', url, true);
  19.     // 如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:
  20.     xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  21.     xhr.send(data);
  22.     var timer;
  23.     timer = window.setInterval(function() {
  24.         if (xhr.readyState == XMLHttpRequest.DONE) {
  25.             window.clearTimeout(timer);
  26.         }
  27.         element.val(xhr.responseText);
  28.     }, 1000);
  29. }


post数据转换


由于标准实现中的send只能接受以下几种输入,所以需要提前对需要传递的数据对象转换为字符串或者FormData格式,这一点就不如JQuery的方便了,但是JQuery如何在传输中间实现事件响应还不得而知,所以不能用,再或者把所有的对象转换中JSON。
  1. void send();
  2. void send(ArrayBuffer data);
  3. void send(Blob data);
  4. void send(Document data);
  5. void send(DOMString? data);
  6. void send(FormData data);
下面是转换的代码,如果浏览器支持FormData就转换,否则转成字符串。
  1. function ajax_generate_data(jsobj) {
  2.     var i;
  3.     if (window.FormData) {
  4.         var data = new FormData();
  5.         for i in jsobj {
  6.             data.append(i,jsobj[i]);
  7.         }
  8.     } else {
  9.         var data = '';
  10.         var datas = [];
  11.         for i in jsobj {
  12.             // for the values so that possible & contained in the strings do not break the format
  13.             var value = encodeURIComponent(jsobj[i]);
  14.             datas.append(i + '=' + value);
  15.         }
  16.         data = datas.join('&')
  17.     }
  18.     console.log(data);
  19.     return data;
  20. }
阅读(6282) | 评论(0) | 转发(0) |
0

上一篇:Flex and Bison

下一篇:Java 中使用JSON

给主人留下些什么吧!~~