2014-08-27 73 views
0

这里是问题:json_encode PHP 5.5 VS 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的VAR:

$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

您的声明'<? json_encode($ locArr,JSON_FORCE_OBJECT)?>'缺少'echo'。没有它,会生成JSON字符串,但根本没有使用。 – lxg 2014-08-27 20:43:30

+0

我很抱歉误读了,这是一个错字。现在解决。 – woodfordreserve 2014-08-27 20:48:27

+0

你不需要通过JSON.parse传递它。你可以做'var oLocations = <?= echo $ oLocations; ?>; – 2014-08-27 20:53:46

回答

0

所以这个问题不在我的PHP或JS里面。它位于Expressionengine内部。它正在拾取“{”并尝试使用EE代码来解释它。最后,我们最终使用了一个Pretty Print替代函数,该函数为key和value的每一行配对添加了中断。

1

当数组嵌套127层以上时,json_encode存在问题。

如果你真的在处理一个巨大的数组,那可能就是这样。

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

编辑:也奇怪,你是不是呼应初始json_encode出来,那它给你的结果。

+0

是不是用于将JSON转换回php变量的json_decode?我从一个php数组开始,需要将JS转换为TO JSON。 – woodfordreserve 2014-08-27 20:27:49

+0

你是完全正确的..我感到困惑。对不起:( – Tim 2014-08-27 20:32:57

+0

)你完全没问题,谢谢你尝试/阅读。 – woodfordreserve 2014-08-27 20:33:59