2014-08-27 1 views
0

Вот вопрос:json_encode PHP 5,5 против 5,3 не играет хорошо с JS

$locArr это огромный массив

Затем вытащить эту информацию в JS я использую

var oLocations = <?= json_encode($locArr, JSON_FORCE_OBJECT) ?>; 

код, созданный с помощью oLocations = json_encode($locArr);

var oLocations = $.parseJSON(,"LastDataBuild":"","Drop24Hour":"NO","Pickup24Hour":"NO","MileageUnit":"MI","AirportIndicator":"0",... 

Обратите внимание на первую запятая, это бросает

Uncaught SyntaxError: Unexpected token ,

если я обернуть все в кавычках, так что он оценивает в строку я получаю

Uncaught SyntaxError: Unexpected token : 

Я попытался json_encoding в и за пределами JavaScript, бездельники, кажется, работает.

Самая трудная часть обо всем этом является то, что в PHP 5.5 можно использовать:

json_encode($locArr, JSON_PRETTY_TEXT | JSON_FORCE_OBJECT);

и все работает нормально. Консоль выведет хороший объект OBJECT вместо строки без каких-либо ошибок.

Неужели кто-нибудь еще испытал это или у вас есть идеи о других вещах, которые я могу попробовать?

Ниже текущее состояние моего кода (я взаимозаменяемые добавление/удаление нескольких строк кода, в то время.):

Декларирование вар в PHP:

$oLocations = json_encode($locArr, JSON_FORCE_OBJECT); 

JS пытается использовать массив:

var oLocations = JSON.parse(<?= $oLocations ; ?>); 
     // while(oLocations.charAt(0) !== '"'){ 
     // oLocations = oLocations.substr(1); 
     // }; 
     // oLocations = '{' + oLocations; 
     // oLocations = $.parseJSON(oLocations); 
     // oLocations = JSON.parse(oLocations); 
     // console.log(oLocations); 
     // oLocations = $.parseJSON(oLocations); 

для этого примера JS бросил эту "Uncaught SyntaxError: Unexpected token o " и это код его реферирование:

var oLocations = $.parseJSON([{"RentalLocationID":"KBR","RentalLocationStatus":"Active","RentalLocationType":"Corporate","RentalLocationName":"KBR HOURS M-F 730-6 SAT 9-1 SUN 10-2","AddressLine1":"8555 JOHN CARPENTER FWY","AddressLine2":"","Latitude":"0","Longitude":"0","AddressCity":"DALLAS","AddressState":"TX","AddressStateName":"TEXAS","AddressZipCode":"75247","AddressCountry":"US","AddressCountryName":"UNITED STATES","PhoneNumber":"214-630-6555","AltPhoneNumber":"","FAXNumber":"","ConfirmMessage":["","","",""], ... 
+1

Ваше заявление ' 'отсутствует' echo'. Без него строка JSON генерируется, но не используется вообще. – lxg

+0

Извините, что это опечатка. Фиксация сейчас. – woodfordreserve

+0

Вам не нужно передавать его через JSON.parse.Вы можете просто выполнить «var oLocations = ; –

ответ

0

Таким образом, проблема не была внутри моего PHP или JS. Это было внутри Expressionengine. Он собирал «{» и пытался интерпретировать его с помощью кодов EE. В итоге мы закончили использование альтернативной функции Pretty Print, которая добавила разрывы для каждой строки, сопрягающей ключ и значение.

1

Есть проблемы с json_encode, когда массив вложен в 127+ уровней.

Если вы действительно имеете дело с огромным массивом, это, вероятно, то, что есть.

http://us2.php.net/json_decode#refsect1-function.json-decode-returnvalues

Edit: Кроме того, странно, что вы не повторяющий первоначальную json_encode, и что это дает вам результаты.

+0

Разве json_decode не используется для преобразования JSON в php-переменные? Я начинаю с массива php и должен преобразовать TO JSON для JS. – woodfordreserve

+0

Ты совершенно прав. Я смутился. Извините :( – Tim

+0

Вы полностью в порядке, спасибо за попытку/чтение. – woodfordreserve

Смежные вопросы