亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

自己動手封裝的 ajax

2024-09-01 08:31:42
字體:
來源:轉載
供稿:網友
過完年后項目開發比較緊張,好長時間沒寫文章了。好在項目進入測試實施后期,可以有時間總結一些自己最近項目的心得了。自從提出WEB2.0富客戶以后AJAX技術現在是越來越流行,有待代替CS桌面程序之勢。

以前開發用了很多AJAX的技術比如EXT,prototype,jQuery等等,但都是開源封裝好的AJAX框架。從沒真正用過純正的AJAX,故參照prototyp面向對象思想自己封裝了一個AJAX框架。希望能給讀者參考、幫助、評價。

復制代碼 代碼如下:


/*
* 自己封裝的ajax
*
*
* @author 姜松
* @version 1.00 $date:2009-07-02
*
* history:
*
*/
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
};
Object.extend(String.prototype, {
include: function(pattern) {
return this.indexOf(pattern) > -1;
},
startsWith: function(pattern) {
return this.indexOf(pattern) == 0;
},
endsWith: function(pattern) {
return this.lastIndexOf(pattern) == (this.length - pattern.length);
},
empty: function() {
return /^/s*$/.test(this) || this == undefined || this == null;
}
});
Object.extend(Array.prototype, {
each: function(iterator) {
try {
for (var i = 0, length = this.length; i < length; i++) {
iterator(this[i]);
}
} catch (e) {
if (e != 'break') { throw e };
}
},
clear: function() {
this.length = 0;
return this;
},
first: function() {
return this[0];
},
last: function() {
return this[this.length - 1];
},
indexOf: function(object) {
for (var i = 0, length = this.length; i < length; i++) {
if (this[i] == object) {return i};
}
return -1;
},
size: function() {
return this.length;
},
include: function(object) {
var found = false;
this.each(function(value) {
if (value == object) {found = true; throw 'break';}
});
return found;
}
});
function $(element) {
if(arguments.length > 1) {
for(var i = 0, elements = [], length = arguments.length; i < length; i++) {
elements.push($(arguments[i]));
}
return elements;
}
if(typeof element == 'string') {
element = document.getElementById(element);
}
return element;
};
var ajax = {
transport: new Object(),
options: new Object(),
getTransport: function() {
if(window.ActiveXObject) {
try {
return new ActiveXObject('Msxm12.XMLHTTP');
} catch(e) {
try {
return new ActiveXObject('Microsoft.XMLHTTP');
} catch(e) {}
}
} else if(window.XMLHttpRequest) {
try {
return new XMLHttpRequest();
} catch(e) {}
}
},
setOptions: function(options) {
ajax.options = {
method: 'get',
asynchronous: true,
contentType: 'application/x-www-form-urlencoded',
encoding: 'utf-8',
parameters: ''
};
Object.extend(ajax.options, options);
ajax.options.method = ajax.options.method.toUpperCase();
},
request: function(url, options) {
ajax.transport = ajax.getTransport();
ajax.setOptions(options);
this.method = ajax.options.method;
var params = ajax.options.parameters;
if (!['GET', 'POST'].include(this.method)) {
this.method = 'GET';
}
if (this.method == 'GET') {
url = ajax.setParameters(url, params);
}
try {
ajax.transport.open(this.method, url, ajax.options.asynchronous);
ajax.transport.onreadystatechange = ajax.stateChange;
ajax.setRequestHeaders();
this.body = this.method == 'POST' ? params : null;
ajax.transport.send(this.body);
} catch (e) {}
},
stateChange: function() {
try {
var readyState = ajax.transport.readyState;
if(readyState == 4) {
var status = ajax.transport.status, transport = ajax, json = ajax.evalJSON();
if(status == 200) {
ajax.options['onSuccess'](transport, json);
} else {
ajax.options['onFailure'](transport, json);
}
}
} catch (e) {}
},
setParameters: function(url, params) {
if (params && typeof params == 'string') {
url += (url.include('?') ? '&' : '?') + params;
} else if (params && typeof params == 'object') {
for(var param in params) {
url += (url.include('?') ? '&' : '?') + param + '=' + params[param];
}
}
return url;
},
setRequestHeaders: function() {
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/xml, text/xml, text/html, text/javascript, application/javascript, application/json, text/javascript, text/plain, */*',
'If-Modified-Since': 'Thu, 01 Jan 1970 00:00:00 GMT'
};
this.method = ajax.options.method;
if (this.method == 'POST') {
headers['Content-type'] = ajax.options.contentType +
(ajax.options.encoding ? '; charset=' + ajax.options.encoding : '');
if (ajax.transport.overrideMimeType &&
(navigator.userAgent.match(/Gecko//(/d{4})/) || [0,2005])[1] < 2005) {
headers['Connection'] = 'close';
}
}
for (var name in headers) {
ajax.transport.setRequestHeader(name, headers[name]);
}
},
evalJSON: function() {
try {
return eval('(' + ajax.transport.responseText + ')');
} catch (e) {}
}
};
var Form = {
serialize: function(element) {
var elements = $(element).all;
var queryComponents = [];
for(var i = 0; i < elements.length; i++) {
var parameter = null, method = elements[i].tagName.toLowerCase();
if(['input', 'select', 'textarea'].include(method)) {
parameter = Form.Serializers[method](elements[i]);
}
if(parameter != null && parameter.constructor == Array) {
var key = encodeURIComponent(parameter[0]);
var value = encodeURIComponent(parameter[1]);
queryComponents.push(key + '=' + value);
}
}
return queryComponents.join('&');
},
request: function(options) {
var params = this.toQueryParams(options.parameters);
options.parameters = this.serialize(this.form);
if(params) {
options.parameters = options.parameters.concat('&' + params);
}
if($(this.form).method) {
options.method = $(this.form).method;
}
return new ajax.request($(this.form).action, options);
},
toQueryParams: function(params) {
var queryComponents = [];
if (params && typeof params == 'string') {
queryComponents.push(encodeURIComponent(params));
} else if (params && typeof params == 'object') {
for(var param in params) {
var key = encodeURIComponent(param);
var value = encodeURIComponent(params[param]);
queryComponents.push(key + '=' + value);
}
}
return queryComponents.join('&');
}
};
Form.Serializers = {
input: function(element) {
switch(element.type.toLowerCase()) {
case 'checkbox':
case 'radio':
return this.inputSelector(element);
default:
return this.textarea(element);
}
},
inputSelector: function(element) {
if(element.checked) {
return [element.name, element.value];
}
},
textarea: function(element) {
return [element.name, element.value];
},
select: function(element) {
return this[element.type == 'select-one' ?
'selectOne' : 'selectMany'](element);
},
selectOne: function(element) {
var value = null, option, index = element.selectedIndex;
if(index >= 0) {
option = element.options[index];
value = option.value == (undefined || '') ? option.text : option.value;
}
return [element.name, value];
},
selectMany: function(element) {
var value = [];
for(var i = 0; i < element.length; i++) {
var option = element.options[i];
if(option.selected) {
var optvalue = option.value == (undefined || '') ? option.text : option.value;
value.push(optvalue);
}
}
return [element.name, value];
}
};
function $F(element) {
this.form = element;
}
Object.extend($F.prototype, Form);
/**************************************************************
* 測試函數
*/
function onTest() {
//get提交方法
var params = new Object();
params.ss = '張三';
new ajax.request('ajax.do?method=doGet', {
onSuccess: function(transport) {
alert(transport.evalJSON().xx)
},
parameters: params
});
//post form提交方法
var params = new Object();
params.idd = 1000;
params.names = '張三'
new $F('form').request({
onSuccess: function(transport) {
alert(transport.evalJSON().xx);
},
parameters: params
});
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女av一区二区| 国产精品一区二区三区在线播放| 久久久噜噜噜久久| 国产成人精品在线播放| 欧美午夜性色大片在线观看| 懂色aⅴ精品一区二区三区蜜月| 国产精品电影一区| 97在线看免费观看视频在线观看| 欧美另类老肥妇| 亚洲精品99久久久久| 亚洲石原莉奈一区二区在线观看| 中文字幕欧美日韩va免费视频| 永久免费毛片在线播放不卡| 亚洲国产婷婷香蕉久久久久久| 精品国产一区二区三区四区在线观看| 三级精品视频久久久久| 久久久久久久网站| 欧美成人免费网| 日韩av有码在线| 亚洲高清不卡av| 国产精品午夜一区二区欲梦| 国模视频一区二区三区| 亚洲日韩欧美视频一区| 午夜精品三级视频福利| 91久久夜色精品国产网站| 欧美亚洲激情视频| 国产精品成人在线| 日韩精品中文字幕有码专区| 国产精品女人久久久久久| 萌白酱国产一区二区| 欧美在线观看一区二区三区| 性欧美xxxx视频在线观看| 97在线日本国产| 久久激情五月丁香伊人| 欧美在线观看视频| 亚洲xxxx3d| 国产成人小视频在线观看| 亚洲视频欧洲视频| 91精品视频在线免费观看| 日韩在线视频免费观看| 精品高清一区二区三区| 日韩电影中文字幕在线观看| 色综合久久88色综合天天看泰| 亚洲福利视频久久| 国产成人精品视频在线| 亚洲综合一区二区不卡| 亚洲天堂一区二区三区| 国产日韩av高清| 永久555www成人免费| 国产一区二区日韩精品欧美精品| 国产不卡视频在线| 欧美巨乳在线观看| 亚洲国产精品小视频| 色七七影院综合| 精品视频在线播放| 米奇精品一区二区三区在线观看| 91极品视频在线| 国产精品69久久| 日韩中文字幕视频在线| 国产婷婷成人久久av免费高清| 亚洲自拍偷拍视频| 亚洲永久在线观看| 国产精品视频免费在线观看| 精品久久久久久中文字幕大豆网| 最近2019年日本中文免费字幕| 亚洲精品福利免费在线观看| 伊人亚洲福利一区二区三区| 欧美精品第一页在线播放| 成人欧美一区二区三区在线湿哒哒| 久久久免费高清电视剧观看| 日本久久久久久久久| 国产精品久久久久久久电影| 欧美激情久久久久久| 欧美成人黄色小视频| 97久久精品人搡人人玩| 日韩电影在线观看永久视频免费网站| 日韩美女福利视频| 精品久久久久久电影| 欧美一级片一区| 亚洲国产古装精品网站| 精品国产一区二区三区四区在线观看| 最近2019好看的中文字幕免费| 丝袜亚洲另类欧美重口| 亚洲国产精品成人va在线观看| 国产精品日韩一区| 欧美日韩亚洲视频一区| 国产精品午夜一区二区欲梦| 国模视频一区二区| 精品国产成人av| 亚洲国产精品va在线观看黑人| 97国产精品人人爽人人做| 欧美xxxx18性欧美| 国产脚交av在线一区二区| 国产精品爱久久久久久久| 国产欧美va欧美va香蕉在| 亚洲人成电影网| 国产日韩av在线播放| 日本免费一区二区三区视频观看| 亚洲第一精品夜夜躁人人爽| 亚洲欧美日韩精品久久| 国产成人精品视| 一区二区三区 在线观看视| 亚洲全黄一级网站| 国产精品自拍偷拍视频| 欧美成人免费播放| 91av在线免费观看| 在线观看日韩视频| 国内久久久精品| 这里只有精品久久| 伊人伊人伊人久久| 国产欧美中文字幕| 国产日韩在线观看av| 亚洲国语精品自产拍在线观看| 亚洲v日韩v综合v精品v| 成人网在线视频| 性欧美亚洲xxxx乳在线观看| 国内精品一区二区三区四区| 成人黄色av网| 国产91精品黑色丝袜高跟鞋| 亚洲人成77777在线观看网| 九九热这里只有在线精品视| 久久精品美女视频网站| 日韩理论片久久| 在线观看精品自拍私拍| 欧美在线视频一区| 992tv成人免费视频| 久久亚洲精品毛片| 亚洲成人激情在线观看| 欧美激情综合色| 亚洲国产另类 国产精品国产免费| 午夜精品一区二区三区在线视| 日本高清+成人网在线观看| 欧美成人一区在线| 国产区精品在线观看| 国产精品爱啪在线线免费观看| 欧美黄色成人网| 91久久久久久久久久久久久| 91香蕉国产在线观看| 亚洲高清一二三区| 国产欧洲精品视频| 久久精品亚洲94久久精品| 中文字幕一区二区精品| 国产成人在线亚洲欧美| 国产精品永久免费在线| 久久免费视频网站| 宅男66日本亚洲欧美视频| 91夜夜未满十八勿入爽爽影院| 亚洲成人av中文字幕| 久久久久免费视频| 国产精品久久精品| 国产美女久久精品| 久久夜色精品国产亚洲aⅴ| 色婷婷综合久久久久中文字幕1| 一区二区av在线| 久久影院在线观看| 欧美日韩国产一区二区三区| 久久99精品国产99久久6尤物| 欧美成人免费播放| 国产精品久久久久久久9999| 欧美成人中文字幕在线| 啪一啪鲁一鲁2019在线视频| 日韩电影免费观看在线观看| 日本国产一区二区三区| 黑人巨大精品欧美一区免费视频|