Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2014, 18:56
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Преобразование объекта в 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?
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2014, 19:05
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от Hapson
можно ли через эту функцию подсунуть какую-нибудь бяку на сервер?
на сервере все равно нужно проверять данные, ибо я могу сам отправить их без вашего скрипта
http://www.php.net/manual/ru/book.filter.php
ваш пример
http://javascript.ru/php/serialize
и лучше использовать JSON
или если используете jquery
https://api.jquery.com/serialize/
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2014, 19:16
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Poznakomlus,
На сервере конечно проверять нужно.
serialize из jquery - это немного из другой оперы. Она форму сериализует для отправки.
вторая serialize - это аналог php функции.
А эта на выходе выдает тоже что и serialize jquery, но сериализует не форму, а объект.

Хотя да, JSON наверно проще.
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2014, 19:20
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

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("&");
};
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2014, 11:21
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

Hapson,

У jquery есть готовый метод, который сериализует объект в строку: param.
Цитата:
Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
Для обратного преобразования deparam (идет как отдельный плагин).
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2014, 11:44
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Hoshinokoe
У jquery есть готовый метод, который сериализует объект в строку: param
Ему не нужен жуквери Не предлагай ему жуквери, а то он обидеться)

В прошлой теме я попытался озвучить ряд причин "почему жуквери" (но не все), но как видишь безуспешно)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скопировать URL из iframe в строку браузера Serezhka Общие вопросы Javascript 4 11.03.2012 10:27
Преобразование значения переменной в строку leny Общие вопросы Javascript 3 01.10.2011 22:34
Водяной знак на fancybox bobrina Общие вопросы Javascript 1 03.06.2011 21:11
Преобразование дробного числа в строку с пробелами между разрядами Mutagena Общие вопросы Javascript 3 28.03.2011 11:05
Преобразование URL в JSON mikeles Events/DOM/Window 1 06.03.2011 12:38