关于原生JavaScript的http全部请求 post get json xml file 全了 拿去救急
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>XMLHttpRequest 请求</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 //使用http请求的步骤 10 //第一步:创建XMLHttpRequest对象 11 var request = function(){ 12 if(window.XMLHttpRequest === undefined){//在ie5和ie6中模拟XMLHttpRequest构造函数 13 window.XMLHttpRequest = function(){ 14 try{ 15 return new ActiveXObject("Msxml2.XMLHTTP.6.0"); 16 }catch(el){ 17 try{ 18 return new ActiveXObject("Msxml2.XMLHTTP.3.0"); 19 }catch(e2){ 20 throw new Error("出错了!"); 21 } 22 } 23 } 24 }else{ 25 return new XMLHttpRequest(); 26 } 27 } 28 //第二步:调用XMLHttpRequest对象的open()方法指定请求的两个必须部分,即方法和URL 29 /* 30 * 第一个参数指定http方法和动作 31 * 第二个参数指定是URL是请求的主题,当时跨域请求时会报错 32 * */ 33 request.open("GET", url); 34 35 /* 36 * 第三部:如果有请求头的话,请求进程下个步骤就是设计它 37 * 例如POST请求需要“Content-Type”头指定请求主题的MIME*/ 38 request.setRequestHeader("Content-Type", "text/Plain"); 39 40 /* 41 42 * 第四步:使用XMLHttpRequest发起http请求的最后一步是指定可选的请求主题并向 43 * 服务器发送它,使用send()方法*/ 44 request.send(null); 45 46 /*注意GET请求绝对没有主体,所以应该传递null或者省略这个参数 47 48 * POST请求通常拥有主体,同时它应该匹配使用setRequestHeader()指定Content-Type头 49 * http求情的顺序: 50 * 请求方法和URL首先到达,然后是请求头, 51 * 最后是请求主体*/ 52 53 //实例: 54 function postMessage(msg){ 55 var request = new XMLHttpRequest();//新请求 56 57 request.open("POST", "./log.php");//用post向服务器发送脚本 58 request.setRequestHeader("Content-Type", "text/Plain;charset=UTF-8");//纯文本请求体 59 request.send(msg); 60 } 61 62 /*解析http响应 63 * 当响应到达时,把它以解析后的XML document对象、解析后的json对象 64 * 或字符串形式传递给回调函数*/ 65 function get(url, callback){ 66 var request = new XMLHttpRequest();//新请求 67 68 request.open("GET", url); 69 request.onreadystatechange = function(){ 70 if(request.readyState === 4 && request.status === 200){ 71 var type = request.getResponseHeader("Content-Type");//获得响应类型 72 if(type.indexof("xml") !== -1 && request.responseXML){ 73 callback(request.responseXML);//document对象响应 74 }else if(type === "application/json"){ 75 callback(JSON.parse(request.responseText));//json响应 76 }else{ 77 callback(request.responseText);//字符串响应 78 } 79 } 80 } 81 request.send(null); 82 } 83 /* 84 * 表单编码请求 85 * 如果html表单的名/值对,使用application/x-www-form-urlencode格式*/ 86 function encodeFormData(data){ 87 if(!data){ 88 return "";//一直返回字符串 89 } 90 var pairs = []; 91 92 for(var name in data){ 93 if (!data.hasOwnProperty(name)) {//判断一个对象是否有你给出名称的属性或对象 94 continue; 95 } 96 if(typeof data[name] === "function"){ 97 continue; 98 } 99 100 var value = data[name].toString(); 101 name = encodeURIComponent(name.replace("%20", "+"));//编码名称 102 value = encodeURIComponent(value.replace("%20", "+")); 103 pairs.push(name + "=" + value); 104 } 105 return pairs.join('&'); 106 } 107 108 /* 109 *使用表单编码数据发起一个http post请求*/ 110 function postData(url, data, callback){ 111 var request = new XMLHttpRequest();//新请求 112 request.open("POST", url);//用post向服务器发送脚本 113 114 request.onreadystatechange = function(){ 115 if(request.readyState === 4 && callback){ 116 callback(request);//调用回调函数 117 } 118 }; 119 120 request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//纯文本请求体 121 request.send(encodeFormData(data));//发送表单编码的数据 122 } 123 124 /* 125 *使用表单编码数据发起一个http get请求*/ 126 function postData(url, data, callback){ 127 var request = new XMLHttpRequest();//新请求 128 request.open("GET", url + "?" + encodeFormData(data));//用post向服务器发送脚本 129 130 request.onreadystatechange = function(){ 131 if(request.readyState === 4 && callback){ 132 callback(request);//调用回调函数 133 } 134 }; 135 136 request.send(null);//发送表单编码的数据 137 } 138 139 /* 140 *使用json编码的请求*/ 141 function postData(url, data, callback){ 142 var request = new XMLHttpRequest();//新请求 143 request.open("POST", url);//用post向服务器发送脚本 144 145 request.onreadystatechange = function(){ 146 if(request.readyState === 4 && callback){ 147 callback(request);//调用回调函数 148 } 149 }; 150 151 request.setRequestHeader("Content-Type", "application/json");//纯文本请求体 152 request.send(JSON.stringify(data));//发送表单编码的数据 153 } 154 155 /* 156 *使用xml编码的请求*/ 157 function postQuery(url, what, radius, callback){ 158 var request = new XMLHttpRequest();//新请求 159 request.open("POST", url);//用post向服务器发送脚本 160 161 request.onreadystatechange = function(){ 162 if(request.readyState === 4 && callback){ 163 callback(request);//调用回调函数 164 } 165 }; 166 167 var doc =document.implementation.createDocument("", "query", null); 168 var query = doc.documentElement; 169 var find = doc.createElement("find"); 170 query.appendChild(find); 171 find.setAttribute("zipcode", where); 172 find.setAttribute("radius", radius); 173 find.appendChild(doc.createTextNode(what));//并设计<find>的内容 174 175 //向服务器发送XML编码数据 176 //注意将自动设置content-type头 177 request.send(doc);//发送表单编码的数据 178 } 179 180 /* 181 182 * 使用http post请求上传文件 183 * 查找有data-uploadto属性的全部<input type="file">元素 184 * 并注册onchang事件处理程序 185 * 这样任何选择的文件都会自动通过post方法发送到指定的"uploadto" url 186 * 服务器的响应式忽略的*/ 187 188 window.onload = function(){ 189 var elts = document.getElementsByName("input"); 190 191 for(var i=0; i<elts.length; i++){ 192 var input = elts[i]; 193 194 if(input.type != "fild"){ 195 continue; 196 } 197 198 var url = input.getAttribute("data-uploadto");//获取上传URL 199 200 if(!url){ 201 continue; 202 } 203 204 input.addEventListener("change", function(){ 205 var file = this.files[0]; 206 207 if(!file){ 208 return; 209 } 210 211 var xhr = new XMLHttpRequest();//新请求 212 213 xhr.open("POST", url);//用post向服务器发送脚本 214 xhr.send(file); 215 }, false) 216 } 217 218 } 219 </script> 220 </body> 221 </html>