Ten.XHR = new Ten.Class({ // XHR : XMLHttpRequest
initialize: function(uri,opts,obj,callPropertyName) { //
Ten.EventDispatcher.implementEventDispatcher(this); //
this.method = 'GET'; //
//
if (!uri) return; //
//
if (!Ten.XHR.isSafeUri(uri)) { //
throw "host differs : " + uri; //
} //
//
if (!opts) opts = {}; // 只是为了opts.method不报错
//
if (opts.method) //
this.method = opts.method; //
//
var self = this; //
this.addEventListener('complete', function() { //
if (!obj) return; //
if (typeof(obj) == 'function' && typeof(callPropertyName) == 'undefined') { //
obj.call(obj, self.request); //
} else { //
obj[callPropertyName].call(obj, self.request); //
} //
}); //
//
this.load(uri, opts.data); //
}, //
getXMLHttpRequest: function() { //
var xhr; //
var tryThese = [ //
function () { return new XMLHttpRequest(); }, //
function () { return new ActiveXObject('Msxml2.XMLHTTP'); }, //
function () { return new ActiveXObject('Microsoft.XMLHTTP'); }, //
function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); } //
]; //
for (var i = 0; i < tryThese.length; i++) { //
var func = tryThese[i]; //
try { //
xhr = func; //
return func(); //
} catch (e) { //
//alert(e); //
} //
} //
return xhr; //
}, //
isSafeUri: function(uri) { //
if (uri.match(/^\w+:/) || uri.match(/^\/\//)) { //
if (uri.split('/')[2] == location.host) return true; //
else return false; //
} else if (uri.match(/^\/[^\/]/) || uri == '/') { //
return true; //
} else if (!uri || uri.length == 0) { //
return false; //
} //
return true; //
}, //
makePostData: function(data) { //
var regexp = /%20/g; //
if (typeof data == 'string' || (data instanceof String)) { //
return encodeURIComponent(data).replace(regexp, '+'); //
} //
var pairs = []; //
for (var k in data) { //
if (typeof data[k] == 'undefined') continue; //
var prefix = encodeURIComponent(k).replace(regexp, '+') + '='; //
var values = Array.prototype.concat(data[k]); //
for (var i = 0; i < values.length; i++) { //
var pair = prefix + encodeURIComponent(values[i]).replace(regexp, '+'); //
pairs.push(pair); //
} //
} //
return pairs.join('&'); //
} //
},{ //
load: function(url, params) { //
var req = Ten.XHR.getXMLHttpRequest(); //
this.request = req; //
//
var self = this; //
req.onreadystatechange = function() { //
self.stateChangeHandler.call(self, req); //
}; //
params = params ? Ten.XHR.makePostData(params) : null; //
//
req.open(this.method, url, true); //
if (this.method == 'POST') //
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 最常见的 POST 提交数据的方式.提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
req.send(params); //
}, //
stateChangeHandler: function(req) { //
this.dispatchEvent('state_change'); //
//
if (req.readyState == 4) { //
this.dispatchEvent('ready', req.status.toString()); //
//
if (req.status >= 200 && req.status < 300) { //
this.dispatchEvent('complete', req); //
} else { //
this.dispatchEvent('error', req); //
} //
} //
} //
}); //
Ten的XHR
最新推荐文章于 2021-08-26 11:49:36 发布