当使用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); }
下面是转换的代码,如果浏览器支持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; }