javascript-ajax学习
* @todo 封装Ajax 传输类
* @param params:参数
* @example 用法: var mAjaxer = new Ajaxer(parames);mAjaxer.send();
*/
(function (window,undefined) {
var defined = {},
rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
defined.trim = function( text )
{
return (text || "").replace( rtrim, "" );
};
defined.parseJSON = function(data,error)
{
if ( typeof data !== "string" || !data )
return null;
data = this.trim(data);
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
window.JSON.parse( data ) :
(new Function("return " + data))();
}
else
error("Invalid JSON: " + data);
};
defined.json2String = function(jsonData) {
var strArr = [];
for(var k in jsonData) {
strArr.push(k + "=" + jsonData[k]);
}
return strArr.join("&");
}
var Ajaxer = function(params)
{
var _p = {},
xmlHttp;
if (typeof params == ‘undefined‘)
{
return false;
}
// 发送请求
this.send = function ()
{
xmlHttp = null;
xmlHttp = _p.createXMLHttp();
if(xmlHttp == null)
{
error = {‘code‘ : 404,"message" : "您的浏览器版本过低,无法创建异步对象,请升级您的浏览器!"}
params.error(error);
}
else
{
//打开ajax请求
xmlHttp.open(params.method,params.url,params.async);
//一般jquery会传递这个参数,进行区分ajax请求
xmlHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");
//如果是post的话,要对url进行encode
if (params.method.toLowerCase() == ‘post‘)
{
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
if (typeof params.data != ‘string‘)
params.data = defined.json2String(params.data);
//对post或get发送数据
xmlHttp.send(params.data);
}
else
{
xmlHttp.send(null);
}
//处理状态
xmlHttp.onreadystatechange = _p.SendBack;
}
};
//处理回调函数
_p.SendBack = function ()
{
if(xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200)
{
var data,
ct = xmlHttp.getResponseHeader("content-type") || "";
data = xmlHttp.response;
//判断是否是json
if (params.dataType === "json" || !params.dataType && ct.indexOf("json") >= 0)
{
data = defined.parseJSON(data,params.error);
}
params.success(data);
}
else
{
var error = {‘code‘ : xmlHttp.status,"message" : xmlHttp.statusText};
params.error(error);
}
if (params.async)
{
xmlHttp = null;
}
}
};
//创建ajax对象
_p.createXMLHttp = function()
{
var xmlhttp = null;
// 针对不同浏览器建立这个对象的不同方式写不同代码
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
//针对某些特定版本的Mozillar浏览器的BUG进行修正
if(xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {
var activexName = [‘MSXML2.XMLHTTP‘, ‘Microsoft.XMLHTTP‘];
for (var i=0; i<activexName.length; i++) {
try {
xmlhttp = new ActiveXObject(activexName[i]);
break;
} catch(e) {}
}
}
return xmlhttp;
}
}
window.Ajaxer = Ajaxer;
window.defined = defined;
})(window);
用惯了jquery原生的忘了差不多,补一下.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。