首页 > 网站 > WEB开发 > 正文

JavaScript AJAX stream 流式显示

2024-04-27 14:16:12
字体:
来源:转载
供稿:网友

javaScript Ajax stream 流式显示

当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了。

流式实现

原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传送完成,就取消定时器。
  1. function ajax_stream(url,data,element){
  2. var xmlHttp=null;
  3. if(window.xmlhttpRequest)
  4. {// code for IE7, Firefox, Opera, etc.
  5. xmlHttp=newXMLHttPRequest();
  6. }
  7. elseif(window.ActiveXObject)
  8. {// code for IE6, IE5
  9. xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
  10. }
  11. if(xmlHttp==null)
  12. {
  13. alert("Your browser does not support XMLHTTP.");
  14. element.val('Your browser does not support XMLHTTP. Click the LOG link to monitor the procedure.');
  15. return0;
  16. }
  17. var xhr=xmlHttp;
  18. xhr.open('POST',url,true);
  19. // 如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:
  20. xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  21. xhr.send(data);
  22. vartimer;
  23. timer=window.setInterval(function(){
  24. if(xhr.readyState==XMLHttpRequest.DONE){
  25. window.clearTimeout(timer);
  26. }
  27. element.val(xhr.responseText);
  28. },1000);
  29. }

post数据转换

由于标准实现中的send只能接受以下几种输入,所以需要提前对需要传递的数据对象转换为字符串或者FormData格式,这一点就不如JQuery的方便了,但是JQuery如何在传输中间实现事件响应还不得而知,所以不能用,再或者把所有的对象转换中JSON。
  1. voidsend();
  2. voidsend(ArrayBuffer data);
  3. voidsend(Blobdata);
  4. voidsend(Documentdata);
  5. voidsend(DOMString?data);
  6. voidsend(FormData data);
下面是转换的代码,如果浏览器支持FormData就转换,否则转成字符串。
  1. function ajax_generate_data(jsobj){
  2. var i;
  3. if(window.FormData){
  4. var data=newFormData();
  5. foriinjsobj{
  6. data.append(i,jsobj[i]);
  7. }
  8. }else{
  9. var data='';
  10. var datas=[];
  11. foriinjsobj{
  12. // for the values so that possible & contained in the strings do not break the format
  13. varvalue=encodeURIComponent(jsobj[i]);
  14. datas.append(i+'='+value);
  15. }
  16. data=datas.join('&')
  17. }
  18. console.log(data);
  19. returndata;
  20. }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表