读书人

经过js发送请求的几种方法

发布时间: 2012-09-15 19:09:28 作者: rapoo

通过js发送请求的几种方法

? var httpAdapter;
??? //创建一个httpAdapter对象
??? function GethttpAdapterRequest()
??? {
??????? //httpAdapter = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new httpAdapterRequest();
???????? return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
??? }
???
??? //以Get方式发送请求,默认Content-Type为"text/xml; charset=gb2312"
??? this.GetData = function(url)
??? {
??????? httpAdapter = GethttpAdapterRequest();
?? httpAdapter.Open("GET",url, false);
?? httpAdapter.SetRequestHeader ("Content-Type","text/xml; charset=gb2312");
//?? httpAdapter.SetRequestHeader ("SOAPAction","http://tempuri.org/getStr");
?? httpAdapter.Send(context);
?? return httpAdapter;
??? }
???
??? //以POST方式发送请求,默认Content-Type为"application/x-www-form-urlencoded"
??? this.PostData = function (url,context)
??? {
??????? httpAdapter = GethttpAdapterRequest();
??????? httpAdapter.Open("POST",url, false);
?? httpAdapter.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//?? httpAdapter.SetRequestHeader ("SOAPAction","http://tempuri.org/getStr");
?? httpAdapter.Send(context);
?? return httpAdapter;
??? }
???
???
??? this.GetDataInAsync = function (url,callbackMethod)
??? {
??????? httpAdapter = GethttpAdapterRequest();
?? httpAdapter.Open("GET",url, true);
?? httpAdapter.SetRequestHeader ("Content-Type","text/xml; charset=gb2312");
//?? httpAdapter.SetRequestHeader ("SOAPAction","http://tempuri.org/getStr");
?? httpAdapter.Send(context);
?? httpAdapter.onreadystatechange = callbackMethod;
??? }
???
??? this.PostDataInAsync = function (url,context,callbackMethod)
??? {
??????? httpAdapter = GethttpAdapterRequest();
??????? httpAdapter.Open("POST",url, true);
?? httpAdapter.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//?? httpAdapter.SetRequestHeader ("SOAPAction","http://tempuri.org/getStr");
?? httpAdapter.Send(context);
?? httpAdapter.onreadystatechange = callbackMethod;
??? }
???
??? //获取指定地址的域名
??? this.GetHost = function(url)
??? {
??????? var host = "null";
??????? var ArryHost=new Array();
??????? if(typeof url == "undefined"|| null == url)
??????? {
??????????? url = window.location.href;
??????? }
??????? var regex = /.*\:\/\/([^\/]*).*/;
??????? var match = url.match(regex);
??????? if(typeof match != "undefined" && null != match)
??????? {
??????????? ArryHost = match[1].split(/:/);
??????????? host =ArryHost[0];
??????? }
??????? return host;
??? }
???
??? //获取当前地址的域名
??? this.GetLocalHost=function()
??? {
?????? return GetHost(document.URL);
??? }

?

? 以前每次写AJAX请求总要写好几个JS函数,包括创建XMLHttpRequest对象、发送请求、成功后的处理函数和失败后的处理函数,下面的JS是把这些东西重构之后参数化的形式,然后放到一个单独的net.js里,后续使用只需引入这个JS,然后新建相应的对象和处理函数即可,可以直接拿来使用

?? var net = new Object();
?? net.READY_STATE_UNINITIALIZED = 0;
?? net.READY_STATE_LOADING = 1;
?? net.READY_STATE_LOADED = 2;
?? net.READY_STATE_INTERACTIVE = 3;
?? net.READY_STATE_COMPLETE = 4;

?

???

?? net.ContentLoader = function(url,onload,onerror,method,params,contentType)
?? {

??? this.req = null;
??? this.onload = onload;
??? this.onerror = (onerror) ? onerror : this.defaultError;
??? this.loadXMLDoc(url,method,params,contentType);
?? }

?

?? net.ContentLoader.prototype = {
???


?? onReadyState: function(){
??????
???? var req = this.req;
???? var ready = req.readyState;
???? if(ready == net.READY_STATE_COMPLETE)
???? {
??????? var httpStatus = req.status;
???? if(httpStatus == 200 || httpStatus == 0)
???????? this.onload.call(this);
??????? else
???????? this.onerror.call(this);
??????????? }
??? },

??? defaultError: function(){
??????????
???? alert("error in fetching data!! readyState=="+this.req.readyState+"\n\nstatus="+this.req.status
????????? +" \n\nheaders"+this.req.getAllResponseHeaders());

??? }

?

?? }

?

?? net.ContentLoader.prototype.loadXMLDoc = function(url,method,params,contentType){

???? if(!method)? //如果没有传入method 参数值,则默认为GET
???? {
???????? method = "GET";
???? }
???? if (!contentType && method=="POST"){
???????? contentType="application/x-www-form-urlencoded;";
???? }
????????
???? if(window.XMLHttpRequest)
???? {
??????? this.req = new XMLHttpRequest();
????? }
???? else if(window.ActiveXObject)
???? {
??????? this.req = new ActiveXObject("Microsoft.XMLHTTP");
???? }
???? if(this.req)
???? {

????????
?????? try{
?????????? ?var loader = this;???
??????????? this.req.onreadystatechange = function(){
??????????????? loader.onReadyState.call(loader);
??????????? }
??????????? this.req.open(method,url,true);?
??????????? //POST方法需要设置的属性
??????????? if (contentType){
?????????????? this.req.setRequestHeader("Content-Type", contentType);
????? ????? }?
??????????? this.req.send(params);
?????
????? ?}catch(err)
????? {?
????????? this.onerror.call(this);
????? }
??? }
?}

?

??? 代码内容不在做过多解释,如果你对JS面向对象和prototype不太熟悉的话请查阅相关书籍,下面演示如何使用:

1.?把上述内容单独放到一个文件net.js(名称可自己定义)

2. 在要使用的JSP页面上引入这个net.js??即? <script src="net.js"> </script>

3. 发送请求GET方式

?? new? net.ContentLoader("http://localhost:8080/CfgWeb/AppLogin.do",getMessage);??

?? 其中第一个参数是请求的后台程序地址,第二个参数是请求成功后的处理函数(自己定义)

?? 后面的参数可省略,也可自己添加第三个参数(请求不成功的处理函数)

?? function getMessage()

?? {

??????? alert(this.req.responseText);? //简单的输出返回结果的字符串形式

??????? alert(this.req.responseXML);?? //XML形式,后面就根据你的需要解析这个XML了

?? }

4. 发送POST请求

?? new net.ContentLoader("http://localhost:8080/CfgWeb/AppLogin.do?formAction=autoComplete",getMessage,null,"POST","&userName=wangwei&password=123" );

?? function getMessage()

?? {

??????? alert(this.req.responseText);? //简单的输出返回结果的字符串形式

??????? alert(this.req.responseXML);?? //XML形式,后面就根据你的需要解析这个XML了

?? }

?

读书人网 >JavaScript

热点推荐