Преобразование объекта в 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, время: 05:20. |