添加到百度首页
添加收藏 RSS 网站地图 旧版网站
  • 全部
  • 网页特效
  • 建站教程
  • 设计分享
当前位置:首页 > 建站教程 > JavaScript教程 >

JavaScript结合AJAX_stream实现流式显示

时间:2015-01-10      来源:互联网     

当使用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;

}

相关文章



大家都在看

最新更新