HTTP 工具函数
来源:互联网 发布:edius4.7软件下载 编辑:程序博客网 时间:2024/06/08 08:52
var HTTP = {};//下面是一个创建 XMLHttpRequest 对象工厂函数列表HTTP._factories = [ function() { return new XMLHttpRequest(); }, function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, function() { return new ActiveXObject("Microsoft.XMLHTTP"); }];//当工厂函数调用之后,在这里存储返回结果HTTP._factory = null;//创建并返回 XMLHttpRequest 对象HTTP.newRequest = function() { if(HTTP._factory !=null ) return HTTP._factory(); for(var i = 0; i < HTTP._factories.length; i++) { try { var factory = HTTP._factories[i]; var request = factory(); if (request != null) { HTTP._factory = factory; return request; } } catch (e) { continue; } } //如果到这里没有工厂函数创建成功,抛出异常 HTTP._factory = function() { throw new Error("XMLHttpRequest not support"); } HTTP._factory();//抛出错误};//使用XMLHttpRequest来获取指定的URL的内容使用一个HTTP GET请求。当respoonse到来时,通过它(纯文本)来指定的回调函数HTTP.getText = function(url, callback) { var request = HTTP.newRequest(); request.onreadystatechange = function() { if(request.readyState == 4 && request.status == 200) callback(request.responseText); } request.open("GET", url); request.send(null);}//用来接收XML文档,并将其解析后的表示传递给一个回调函数HTTP.getXML = function(url, callback) { var request = HTTP.newRequest(); request.onreadystatechange = function() { if(request.readyState == 4 && request.status == 200) callback(request.responseXML); } request.open("GET", url); request.send(null);}/** *使用一个HTTP HEAD请求获取指定的URL的headers。当headers到达,用HTTP.parseHeaders()解析它,把结果传给回调函数。 *如果服务器返回一个错误代码,调用指定的errorHandler函数。如果没有指定错误句柄,将null传递给该回调函数。 * */HTTP.getHeaders = function(url, callback, errorHandler) { var request = HTTP.newRequest(); request.onreadystatechange = function() { if(request.readyState == 4) { if(request.status == 200) { callback(HTTP.parseHeaders(request)); } else{ if(errorHandler) errorHandler(request.status, request.statusText); else callback(null); } } } request.open("HEAD", url); request.send(null);};/** *从一个XMLHttpRequest对象解析响应头,作为一个新对象的属性名和属性值返回header的名和值 * */ HTTP.parseHeaders = function(request) { var headerText = request.getAllResponseHeaders(); //从服务器返回文本 var headers = {}; //这里是返回值 var ls = /^\s*/; //前面空格正则表达式 var ts = /\s*$/; //后面空格正则表达式 //把headers分割为数组 var lines = headerText.split("\n"); for(var i = 0; i < lines.length; i++){ var line = lines[i]; if(lines.length == 0) continue; //数组为空,跳过 //以冒号分割line,去掉空格 var pos = line.indexOf(":"); var name = line.substring(0, pos).replace(ls, "").replace(ts, ""); var value = line.substring(pos+1).replace(ls, "").replace(ts, ""); //将 name/value 对,存入javascript对象 headers[name] = value; } return headers; };//向指定的url发送一个HTTP POST请求,用对象的属性名和属性值作为请求体,根据它的内容类型解析服务器的响应,//通过结果值回调函数,如果一个http错误发生时,调用指定的errorHandler功能,如果没有指定错误处理程序返回nullHTTP.post = function(url, values, callback, errorHandler) { var request = HTTP.newRequest(); request.onreadystatechange = function() { if(request.readyState == 4) { if(request.status == 200) { callback(HTTP._getResponse(request)); } else { if(errorHandler) errorHandler(request.status, request.statusText); else callback(null); } }}request.open("POST", url);//头信息告诉服务器如何解释请求的主体request.setRequestHeader("Content-type","application/x-www-form-urlencoded");//编码对象的属性和值,并将它们发送为请求的主体request.send(HTTP.encodeFormData(values));};//编码 属性名称/值对 的一个对象就好像他们是来自html表单,使用 application/x-www-form-urlencoded 格式HTTP.encodeFormData = function(data) { var pairs = []; var regexp = /%20/g; //匹配编码后的空格 for(var name in data) { var value = data[name].toString(); //首先创建属性名/值对,并编码它们.全球函数encodeURIComponent几乎是我们想要的,但它编码空格为为% 20,而不是"+"。我们必须用String.replace()解决. var pair = encodeURIComponent(name).replace(regexp,"+") + '=' + encodeURIComponent(value).replace(regexp,"+"); pairs.push(pair); } return pairs.join('&');};HTTP._getResponse = function(request) {//检查服务器返回的内容类型switch(request.getResponseHeader("Content-Type")) { case "text/xml": //如果它是一个XML文档,使用解析文档对象 return request.responseXML; case "text/json": case "text/javascript": case "application/javascript": case "application/x-javascript": //如果响应是javascript代码,或一个json编码的值,调用eval()在文本“解析”到一个javcascript值 //注意:只有jacascript代码是来自受信任的服务器,才这样做。 return eval(request.responseText); default: //否则,把响应作为普通文本并返回字符串 return request.responseText;}};//接收返回的内容function doFun(content) {}//错误句柄函数function errorFun(stat,statext) { alert("状态:" + stat + "\n" + "错误:" + statext);}
使用:
//提交表单,调用POST方法var uname = document.getElementById("username");var usex = document.getElementById("sex");var formdata = {'username':'tom','sex':'男'}; HTTP.post("./test.php",formdata, doFun, errorFun);
//请求获取指定的URL的headersHTTP.getHeaders("./a.html", doFun, errorFun);
- HTTP 工具函数
- 常用的Http工具函数集合
- HTTP工具
- JSP工具函数-[http://blog.csdn.net/kexin732]
- 工具函数
- 工具函数
- 工具函数
- 工具函数
- 工具函数
- 工具函数
- HTTP调试工具:Fiddler
- HTTP 协议分析工具
- HTTP客户端工具
- 一个http请求工具
- 一个http处理工具
- Http工具类
- Http请求工具类
- http请求工具类
- 修改myEclipse8.5的默认的工作空间
- 遮罩
- windows 8 system 进程 cpu 占用率 持续50%以上
- 区间 top k
- 计算机一级刊物和核心期刊介绍
- HTTP 工具函数
- 一场青春一场繁华梦 青春是一首寂寞的歌
- HTML5 未来不可阻挡的力量
- 浅谈协方差矩阵
- CRichEditCtrl修改颜色,字体,粗体,字号
- 研究生学习指南
- 提高班:一度春秋
- 关于 STL 里面的 map使用----理解了一部分 :map映射
- 至搞技术的人