流式實現
原理就是設定定時器,定時的查看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; } |