Преобразование объекта в URL строку
Написал вот такую функцию:
function objectToUrlString(obj){
function convert(param){
var str = "";
for(var x in param){if(!param.hasOwnProperty(x)){continue;}
str += ifArray(x, param[x]) +"&";
}
return str.trim("&");
}
function ifArray(key, val){
if($G.isObject(val) || $G.isArray(val)){
var str = "", index;
for(var x in val){if(!val.hasOwnProperty(x)){continue;}
index = /[^0-9]+/.test(x) ? key +"['"+ x +"']" : key +"["+ x +"]";
str += ifArray(index, val[x]) +"&";
}
return str.trim("&");
}
switch(val){
case false: case undefined: case NaN: case Infinity: val = 0; break;
case true: val = 1; break;
case null: val = ""; break;
default: val = val instanceof String ? val : val.toString();
}
val = encodeURIComponent(val);
return encodeURIComponent(key) +"="+ val;
}
return convert(obj);
}
param = {
cars:{
auto:["opel", "daewoo"],
bus:["tatra", "ikarus"]
}
};
param = paramToString(param);
// cars["auto"][0]=opel&cars["auto"][1]=daewoo&cars["bus"][0]=tatra&cars["bus"][1]=ikarus
Она конвертирует объект с любой вложенностью в URL строку - можно всунуть ее в GET или POST. В php потом все это будет в массивах GET или POST (после ajax отправки) Вроде работает как хотел, но интересно, можно ли через эту функцию подсунуть какую-нибудь бяку на сервер? Или лучше использовать JSON? |
Цитата:
http://www.php.net/manual/ru/book.filter.php ваш пример http://javascript.ru/php/serialize и лучше использовать JSON или если используете jquery https://api.jquery.com/serialize/ |
Poznakomlus,
На сервере конечно проверять нужно. serialize из jquery - это немного из другой оперы. Она форму сериализует для отправки. вторая serialize - это аналог php функции. А эта на выходе выдает тоже что и serialize jquery, но сериализует не форму, а объект. Хотя да, JSON наверно проще. |
PS аналог serialize из jquery я уже написал
$G.serializeForm = function(form){
/**
* @form - объект формы
*
* @return {string} - строка пригодная для отправки в POST Ajax
*/
var fields = form.elements;
var field, name, value, type;
var res = '';
for(var z = 0; z < fields.length; z++){
field = fields[z];
name = field.name;
value = field.value;
type = field.type;
if(typeof name == "undefined" || name == ""){continue;}
if(type == 'checkbox' || type == 'radio'){
if(field.checked){
res += name +"="+ encodeURIComponent(value) +"&";
}
continue;
}
if(type == "select-multiple"){
for(var so = 0; so < field.length; so++){
if(field[so].selected){
res += name +"="+ encodeURIComponent(field[so].value) +"&";
}
}
continue;
}
res += name +"="+ encodeURIComponent(value) +"&";
}
return res.trim("&");
};
|
|
Цитата:
В прошлой теме я попытался озвучить ряд причин "почему жуквери" (но не все), но как видишь безуспешно) |
| Часовой пояс GMT +3, время: 19:12. |