Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2015, 16:26
Новичок на форуме
Отправить личное сообщение для php-coder Посмотреть профиль Найти все сообщения от php-coder
 
Регистрация: 21.08.2015
Сообщений: 3

Преобразование строки в объект
Всем привет!!!

В общем в цикле генерирую строку вида '{"12": 150, "13": 150, "14": 100}'
Как мне после перегнать ее объект для передачи через ajax?

Для этой строки срабатывает JSON.parse, но если строка будет в виде "{'12': 150, '13': 150, '14': 100}" то объект не получается. Подскажите, почему? кавычка и двойная кавычка в js имеют же одинаковое значение. тогда в чем разница?

срабатывает eval, но пишут лучше ее не использовать.

Подскажите, как лучше и правильнее сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2015, 16:35
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

php-coder,
потому что в JSON формате ковычки должны быть двойные.
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2015, 09:25
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

php-coder, юзай eval. Почему бы и нет? Ты же сам генерируешь данные, вряд ли ты какой-то зловещий код сгенерируешь.
Ответить с цитированием
  #4 (permalink)  
Старый 22.08.2015, 13:15
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
кавычка и двойная кавычка в js имеют же одинаковое значение
В языке программирования JS - да. В формате JSON - нет. Используй двойные.

Только непонятно, зачем вообще сначала собирать строку, а потом эту строку переводить в объект (при том что реализующий ajax модуль все равно будет переводить объект в строку). Почему сразу не генерировать объект?
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2015, 09:29
Новичок на форуме
Отправить личное сообщение для php-coder Посмотреть профиль Найти все сообщения от php-coder
 
Регистрация: 21.08.2015
Сообщений: 3

Сообщение от Erolast Посмотреть сообщение
В языке программирования JS - да. В формате JSON - нет. Используй двойные.

Только непонятно, зачем вообще сначала собирать строку, а потом эту строку переводить в объект (при том что реализующий ajax модуль все равно будет переводить объект в строку). Почему сразу не генерировать объект?
Все данные берутся из формы в которой, каждый раз разные поля. т.е. я заранее не знаю имена и количество свойств.

Если знаете вариант, подскажите, пожалуйста, как сразу объект генерировать.

В html форме вот такие инпуты
<input name="dataId[14]" value="100" type="text" />

их может быть разное количество. изменяется только value и число в name(в данном примере 14). Нужно чтобы php аяксом получил массив
[dataId] => Array
(
     [12] => 150
     [13] => 150
     [14] => 100
)
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2015, 09:47
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от php-coder
В html форме вот такие инпуты
<input name="dataId[14]" value="100" type="text" />


их может быть разное количество. изменяется только value и число в name(в данном примере 14). Нужно чтобы php аяксом получил массив
Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var obj={'dataId': []};
	$('[name^="dataId"]').each(function(){
		obj.dataId.push(this.value);
	});
	alert(obj.dataId);
});
</script>
</head>
<body>
<form>
	<input name="dataId[0]" value="10" type="text" />
	<input name="dataId[1]" value="20" type="text" />
	<input name="dataId[2]" value="30" type="text" />
	<input name="dataId[3]" value="40" type="text" />
	<input name="dataId[4]" value="50" type="text" />
</form>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 24.08.2015, 09:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от php-coder
генерирую строку вида
'{"12": 150, "13": 150, "14": 100}'
Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var obj={};
	$('[name^=dataId]').each(function(){
		var key=this.name.match(/\d+/);
		obj[key]=this.value;
	});
	console.log(obj);
});
</script>
</head>
<body>
<form>
	<input name="dataId[0]" value="10" type="text" />
	<input name="dataId[1]" value="20" type="text" />
	<input name="dataId[2]" value="30" type="text" />
	<input name="dataId[3]" value="40" type="text" />
	<input name="dataId[4]" value="50" type="text" />
</form>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 26.08.2015, 09:29
Новичок на форуме
Отправить личное сообщение для php-coder Посмотреть профиль Найти все сообщения от php-coder
 
Регистрация: 21.08.2015
Сообщений: 3

ksa, спасибо, последний вариант - то что нужно.
Ответить с цитированием
  #9 (permalink)  
Старый 26.08.2015, 13:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от php-coder
Нужно чтобы php аяксом получил массив
[dataId] => Array
(
[12] => 150
[13] => 150
[14] => 100
)
Чем вам не устраивает seralise или serialiseArray?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование сложной строки в число Basil_JS Events/DOM/Window 3 05.09.2014 08:16
Преобразование строки в дату. Serious2008 Общие вопросы Javascript 5 28.11.2012 14:22
Как из строки содержащей namespace получить ссылку на объект? wwwboy Общие вопросы Javascript 2 07.12.2011 09:22
как из строки получить объект? miha-ha Общие вопросы Javascript 5 03.09.2010 21:07
Для события onCLick получить индекс строки и объект грида. progi2007 ExtJS 4 05.08.2009 11:31