Valahogy mindig akkor hal le az extjs.com, amikor olyan bug-ba ütközök, amelyet valószínűleg már több száz másik ExtJS használó is megtalált, és a fórumban számtalan megoldást kínáltak a probléma orvoslására.
Az url-ek elkódolását nagyon olcsón oldották meg az ExtJS-ben.
str:'Hello',
obj: {
foo: 'Bar',
foobar: {
szia:'világ!',
hello:'world'
}
},
szamok: ['egy', 'ketto', 'harom'],
ures: []
}
console.log( Ext.urlEncode( obj) );
// str=Hello&szamok=egy&szamok=ketto&szamok=harom&ures
A tömböt rosszul, az objektumot sehogy, a stringet jól jelenítette meg, a várt eredmény ez lenne:
Mivel nagyobb problémát okozott volna a szerver oldalon módosítani a kódot, kénytelen voltam az Ext.urlEncode -t felülírni:
urlEncode: function(o, pre){
if(!o){
return "";
}
var buf = [];
for (var key in o) {
if ( o.hasOwnProperty(key) ) {
var ov = o[key], k = encodeURIComponent(key);
if(typeof pre != "undefined"){
k = pre+'['+k+']';
}
var type = typeof ov;
if(type == "undefined"){
buf.push(k+"=");
}else if(type != "function" && type != "object"){
buf.push(k+'='+encodeURIComponent(ov));
}else if(Ext.isArray(ov)){
if (ov.length){
for(var i = 0, len = ov.length; i < len; i++) {
buf.push(arguments.callee({'':ov[i]},k));
}
} else {
buf.push(k+"[]=");
}
} else if(type == "object"){
for (var i in ov) {
if ( ov.hasOwnProperty(i) ) {
var t = {}; t[i] = ov[i];
buf.push(arguments.callee(t,k));
}
}
}
}
}
return buf.join("&");
}
});