三个字符导致responseText为“”值

写了一个AJAX sendRequset函数,一直用得很好,突然有一天发现连续调用 sendRequest函数后,req.responseText总为“”值
java 代码
 
  1. /** 
  2.  * @author zhongjin.chai 
  3.  */  
  4. var READY_STATE_UNINITIALIZED = 0;  
  5. var READY_STATE_LOADING = 1;  
  6. var READY_STATE_LOADED = 2;  
  7. var READY_STATE_INTERACTIVE = 3;  
  8. var READY_STATE_COMPLETE = 4;  
  9.   
  10. function sendRequest(url, params, HttpMethod, callBack){  
  11.     if(!HttpMethod){  
  12.         HttpMethod = "GET";  
  13.     }  
  14.     var queryStr = "";  
  15.     if(typeof params == 'object'){  
  16.         var querybuff = [];  
  17.         for(key in params){  
  18.             querybuff.push(key+"="+params[key]);  
  19.         }  
  20.         queryStr = querybuff.join('&');  
  21.     }else{  
  22.         queryStr = params;  
  23.     }  
  24.       
  25.     req = initXMLHTTPRequest();  
  26.     if(req){  
  27.         var args=[];  
  28.         for(var i=4;i<arguments.length;i++){  
  29.             args.push(arguments[i]);  
  30.         }  
  31.         req.onreadystatechange = function(){  
  32.             onReadyState.call(this, req, callBack, args);  
  33.         }  
  34.         req.open(HttpMethod, url, true);  
  35.         req.setRequestHeader(  
  36.             "Content-Type""application/x-www-form-urlencoded"  
  37.         );  
  38.         req.setRequestHeader("X-Requested-With""XMLHttpRequest");  
  39.         req.setRequestHeader("Content-length", queryStr.length);  
  40.         req.setRequestHeader("Connection""keep-alive");  
  41.         req.send(queryStr);  
  42.     }  
  43. }  
  44.   
  45. function initXMLHTTPRequest(){  
  46.     var xRequest = null;  
  47.     if(window.XMLHttpRequest){  
  48.         xRequest = new XMLHttpRequest();  
  49.     }else if(window.ActiveXObject){  
  50.         xRequest = new ActiveXObject("Microsoft.XMLHTTP");  
  51.     }  
  52.     return xRequest;  
  53. }  
  54.   
  55. function onReadyState(req, callBack, args){  
  56.     var ready = req.readyState;  
  57.     var data = null;  
  58.     if(ready == READY_STATE_COMPLETE && req.status == 200){  
  59.         data = req.responseText;  
  60.         args.unshift(data);  
  61.         callBack.apply(this, args);  
  62.     }  
  63. }  
这是怎么回事呢?最终发现原来问题出在第25行:
java 代码
  1. req = initXMLHTTPRequest();  

由于,这么写,javascript会默认req为全局变量,所以连续调用 sendRequest,后面调用的时候会覆盖req。正确的写法应该是:
java 代码
  1. var req = initXMLHTTPRequest();  
另外,连续调用ajax请求会导致不稳定(在FF里有时候第一次加载页面的时候,连续调用会导致某个请求失败,具体原因还在查),所以尽量不要连着调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值