Ext 的 ajax提交,总离不开对变量{xx=1&yy=2}等代码的处理。
自己能否实现,当然可以。但是写出来之后,再阅读EXT源码进行比较,发现自己代码的UGLY!!
通过抄写EXT部分代码,加深印象
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
Ext = {};
Ext.isArray = function(v){
return Object.prototype.toString.apply(v) === '[object Array]';
}
Ext.each = function(array,fn,scope){
if(array === null || array === undefined || ((Ext.isArray(array) && !array.length)) || (array === '' )){
return;
}
if (typeof array.length == "undefined" || typeof array == "string"){
array = [array];
}
for(i =0, j = array.length; i <j; i++){
if(fn.call(scope||array[i],array[i],i,array)===false){return i;};
}
}
urlEncode = function (o){
var buf = [],
key,
e = encodeURIComponent;
for(key in o) {
Ext.each(o[key] || key, function(val, i) {
buf.push("&", e(key), "=", val != key ? e(val) : "");
});
}
return buf.join('');
}
urlDecode = function(string, overwrite){
var obj = {},
pairs = string.split('&'),
d = decodeURIComponent,
name,
value;
Ext.each(pairs, function(pair) {
pair = pair.split('=');
name = d(pair[0]);
value = d(pair[1]);
obj[name] = overwrite || !obj[name] ? value :
[].concat(obj[name]).concat(value);
});
return obj;
}
/** 测试部分代码*/
var testParam = {foo: 1, bar: 2};
var enStr = urlEncode(testParam);
alert(enStr);
var newTestParam = urlDecode(enStr);
alert(newTestParam);
//-->
</SCRIPT>
</BODY>
</HTML>