通用封装ajax代码
Posted 曹豆芽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用封装ajax代码相关的知识,希望对你有一定的参考价值。
通用封装ajax代码
封装代码
function Ajax(obj)
var ajax = null;
if(window.XMLHttpRequest)
ajax = new XMLHttpRequest();
else if(window.ActiveXobject)
ajax = new ActiveXobject("Microsoft.XMLHTTP");
else
alert("请升级浏览器");
return false;
obj.method = obj.method || "get"; // 默认发送get请求
if(!obj.url)
throw new Error("请求地址不能为空");
if(Object.prototype.toString.call(obj.method) != "[object String]")
throw new Error("请求地址必须是字符串");
else if(obj.method != "get" && obj.method != "post")
throw new Error("请求地址必须是get或者是post");
if(Object.prototype.toString.call(obj.url) != "[object String]")
throw new Error("请求地址必须是字符串");
if(obj.async == "undefined")
obj.async = true;
if(Object.prototype.toString.call(obj.async) != "[object Boolean]")
throw new Error("是否异步的参数必须是布尔值");
if(obj.data != "undefined")
if(Object.prototype.toString.call(obj.data) == "[object String]")
if(obj.data.indexOf("&")>=0)
if(obj.method == "get")
obj.url += "?"+obj.data;
else if(obj.method == "post")
var str = obj.data;
else
throw new Error("携带的参数格式不对,字符串必须是带'='符号的键值对");
else if(Object.prototype.toString.call(obj.data) == "[object Object]")
var str = '';
for(var attr in obj.data)
str += attr + "=" + obj.data[attr];
else
throw new Error("携带的参数格式不对,需要字符串或者对象");
if(obj.success == "undefined")
obj.success = function(res)
if(obj.error == "undefined")
obj.error = function()
if(Object.prototype.toString.call(obj.success) != "[object Function]" || Object.prototype.toString.call(obj.error) != "[object Function]")
throw new Error("回调函数必须是函数");
ajax.open(obj.method,obj.url,obj.async)
ajax.onreadystatechange=function()
if(ajax.readyState == 4)
if(ajax.status>=200 && ajax.status<300)
var res;
switch(obj.dataType)
case undefined:
case "json":
res = JSON.parse(ajax.responseText);
break;
case "string":
res = ajax.responseText;
break;
case "xml":
res = ajax.responseXML;
break;
default:
throw new Error("期望的数据格式参数传入错误!");
obj.success(res);
else
obj.error();
if(obj.method=='post')
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
if(obj.data != undefined)
ajax.send(str);
return;
ajax.send();
调用
var pname = document.querySelector("[name='province']").value.trim();
var response = Ajax(
data:province:pname,
url:"postAjax.php",
method:"post",
asyn:true,
success:function(res)
var arr = JSON.parse(res);
var ul = document.querySelector("ul");
ul.innerhtml = '';
for(var i=0;i<arr.length;i++)
var li = document.createElement("li");
li.innerText = arr[i];
ul.appendChild(li);
);
get和post的区别:
- get请求的数据展示在地址栏,post在http请求的请求主体中
- get请求的数据长度有限制,post没有限制,除非在服务器设置限制
- get请求的数据格式有限制,必须是url编码的,post的数据没有限制
- get请求不如post安全
- get请求容易有缓存,post没有缓存
以上是关于通用封装ajax代码的主要内容,如果未能解决你的问题,请参考以下文章