JavaScript AJAX stream 流式显示

来源:互联网 发布:淘宝鞋店店铺简介 编辑:程序博客网 时间:2024/04/30 00:45
当使用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;


  }
0 0