Преобразование строки в объект
Всем привет!!!
В общем в цикле генерирую строку вида '{"12": 150, "13": 150, "14": 100}' Как мне после перегнать ее объект для передачи через ajax? Для этой строки срабатывает JSON.parse, но если строка будет в виде "{'12': 150, '13': 150, '14': 100}" то объект не получается. Подскажите, почему? кавычка и двойная кавычка в js имеют же одинаковое значение. тогда в чем разница? срабатывает eval, но пишут лучше ее не использовать. Подскажите, как лучше и правильнее сделать? |
php-coder,
потому что в JSON формате ковычки должны быть двойные. |
php-coder, можешь одинарные писать кавычки и вообще что угодно хоть тройные и назвать можешь формат в честь себя, если свои функции парсинга напишешь :D к javascript это никакого отношения не имеет, как и javascript к java, просто сделали такой формат строки для удобства и назвали JSON, и стали все люди им пользоваться и благодарить, и ввели поддержку сего формата встроенными функциями в языки, и возрадовались все.
|
php-coder, юзай eval. Почему бы и нет? Ты же сам генерируешь данные, вряд ли ты какой-то зловещий код сгенерируешь.
|
Цитата:
Только непонятно, зачем вообще сначала собирать строку, а потом эту строку переводить в объект (при том что реализующий ajax модуль все равно будет переводить объект в строку). Почему сразу не генерировать объект? |
Цитата:
Если знаете вариант, подскажите, пожалуйста, как сразу объект генерировать. В html форме вот такие инпуты <input name="dataId[14]" value="100" type="text" /> их может быть разное количество. изменяется только value и число в name(в данном примере 14). Нужно чтобы php аяксом получил массив [dataId] => Array ( [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={'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> |
Цитата:
<!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> |
ksa, спасибо, последний вариант - то что нужно.
|
Цитата:
|
Часовой пояс GMT +3, время: 10:21. |