AJAX详解
1 function fnGetXHR(){ 2 if(window.XMLHttpRequest){ 3 return new XMLHttpRequest; 4 }else{ // IE6- 5 return new window.ActiveXObject("Microsoft.XMLHTTP"); 6 } 7 }
1 var xhr = fnGetXHR(); 2 xhr.open(‘get‘, ‘data.txt‘, false); 3 xhr.send(null); 4 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 5 console.log(xhr.responseText); 6 }
异步请求:如果请求是异步的,需要在readyStateChange事件中来检测readyState属性的值,当readyState等于4时响应数据就会自动填充到XHR对象服务器端响应的相关属性。
1 var xhr = fnGetXHR(); 2 xhr.open(‘get‘, ‘data.txt‘, true); 3 xhr.send(null); 4 xhr.onreadystatechange = function(){ 5 if(xhr.readyState == 4){ 6 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 7 console.log(xhr.responseText); 8 } 9 } 10 }
异步请求在接受到响应之前还可以通过abort方法来取消。同步请求不能取消,另外abort方法必须在send方法之后调用否则会报错。
1 var xhr = fnGetXHR(); 2 xhr.open(‘get‘, ‘data.txt‘, true); 3 xhr.onreadystatechange = function(){ 4 if(xhr.readyState == 4){ 5 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 6 console.log(xhr.responseText); // 不会执行 7 } 8 } 9 } 10 xhr.send(null); 11 xhr.abort();
NOTE:同步请求去监控readystatechange事件时必须放在send方法之前。如果放在send方法之后readystatechange绑定的事件处理函数已经在事件触发以后了。
1 var xhr = fnGetXHR(); 2 xhr.open(‘get‘, ‘data.txt‘, false); 3 // xhr.send(); // 对于同步请求send放在这儿的话事件的绑定已经在事件触发后,没有作用 4 xhr.onreadystatechange = function(){ 5 if(xhr.readyState == 4){ 6 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 7 console.log(xhr.responseText); 8 } 9 } 10 } 11 xhr.send(null);
1 var xhr = fnGetXHR(); 2 xhr.open(‘get‘, ‘data.txt‘, true); 3 xhr.onreadystatechange = function(){ 4 if(xhr.readyState == 4){ 5 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 6 console.log(xhr.responseText); 7 } 8 } 9 } 10 xhr.setRequestHeader(‘Auth‘, ‘hum‘); // 添加成功 11 //xhr.setRequestHeader(‘User-Agent‘, ‘hum‘); // 尝试修改默认的会报错误 12 xhr.send(null); 13 //xhr.setRequestHeader(‘Auth‘, ‘hum‘); // send方法之后使用报错
使用XHR的getResponseHeader可以获取相应的响应头部信息。也可以通过getAllResponseHeaders方法来获取所有的响应头部信息。
1 var xhr = fnGetXHR(); 2 xhr.open(‘get‘, ‘data.txt‘, true); 3 xhr.onreadystatechange = function(){ 4 if(xhr.readyState == 4){ 5 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 6 console.log(xhr.getResponseHeader(‘Content-Length‘)); 7 console.log(xhr.getAllResponseHeaders()); // 不能用JSON.parse方法解析 8 } 9 } 10 } 11 xhr.send(null);
1 xhr.open(‘get‘, ‘data.php?name1=value1&name2=value2‘); // 查询字符串 2 // 获取URLParam的辅助方法 3 function fnGetURLParam(data){ 4 var urlParam = []; 5 for(var key in data){ 6 urlParam.push(encodeURIComponent(key) + ‘=‘ + encodeURIComponent(data[key])); 7 } 8 return urlParam.join(‘&‘); 9 } 10 console.log(fnGetURLParam({name: ‘hum‘, age: 20})); // name=hum&age=20
1 var xhr = fnGetXHR(); 2 xhr.open(‘post‘, ‘data.php‘, true); 3 xhr.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘); 4 xhr.onreadystatechange = function(){ 5 if(xhr.readyState == 4){ 6 if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 7 console.log(xhr.responseText); 8 } 9 } 10 } 11 xhr.send(fnGetURLParam({name: ‘hum‘, age: 20}));
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。