首頁 > web前端 > js教程 > JavaScript結合AJAX_stream實作串流顯示_javascript技巧

JavaScript結合AJAX_stream實作串流顯示_javascript技巧

WBOY
發布: 2016-05-16 16:21:39
原創
1378 人瀏覽過

使用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? 資料);
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;
}
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板