zoukankan      html  css  js  c++  java
  • JavaScript AJAX stream 流式显示

     
    当使用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. }
     
  • 相关阅读:
    Win32C++调用C#(一):开篇
    C#+ICE+TCP通信=数据传输
    第一章 程序设计和C语言
    第一章 HTML5,CSS3及响应式设计入门恢复
    第一章 程序设计和C语言
    HTTP状态码
    HTML 实践
    HTML基础
    创建HTML文件与建立HTML格式
    HTML标签
  • 原文地址:https://www.cnblogs.com/jinhuixin/p/4125927.html
Copyright © 2011-2022 走看看