2014-08-27 75 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