JavaScript AJAX stream 流式显示
流式实现
原理就是设置定时器,定时的查看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);
-
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;
- }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。