2017-03-06 59 views
1

我在HTML頁面上出現以下錯誤。PHP json在Javascript中的編碼錯誤

Uncaught SyntaxError: page URL Here Unexpected token ;

這是代碼(變量別處定義確實存在。

<script> 
    statesDropDown = <?php echo json_encode($this->states);?>; 
    programIdsDropDown = <?php echo json_encode($this->programIdsData);?>; 
</script> 

這是上面的頁面

<script> 
    statesDropDown = [{"id":"1","code":"AL","name":"Alabama"},{"id":"2","code":"AK","name":"Alaska"},{"id":"3","code":"AZ","name":"Arizona"},{"id":"4","code":"AR","name":"Arkansas"},{"id":"5","code":"CA","name":"California"},{"id":"6","code":"CO","name":"Colorado"},{"id":"7","code":"CT","name":"Connecticut"},{"id":"8","code":"DE","name":"Delaware"},{"id":"9","code":"FL","name":"Florida"},{"id":"10","code":"GA","name":"Georgia"},{"id":"11","code":"HI","name":"Hawaii"},{"id":"12","code":"ID","name":"Idaho"},{"id":"13","code":"IL","name":"Illinois"},{"id":"14","code":"IN","name":"Indiana"},{"id":"15","code":"IA","name":"Iowa"},{"id":"16","code":"KS","name":"Kansas"},{"id":"17","code":"KY","name":"Kentucky"},{"id":"18","code":"LA","name":"Louisiana"},{"id":"19","code":"ME","name":"Maine"},{"id":"20","code":"MD","name":"Maryland"},{"id":"21","code":"MA","name":"Massachusetts"},{"id":"22","code":"MI","name":"Michigan"},{"id":"23","code":"MN","name":"Minnesota"},{"id":"24","code":"MS","name":"Mississippi"},{"id":"25","code":"MO","name":"Missouri"},{"id":"26","code":"MT","name":"Montana"},{"id":"27","code":"NE","name":"Nebraska"},{"id":"28","code":"NV","name":"Nevada"},{"id":"29","code":"NH","name":"New Hampshire"},{"id":"30","code":"NJ","name":"New Jersey"},{"id":"31","code":"NM","name":"New Mexico"},{"id":"32","code":"NY","name":"New York"},{"id":"33","code":"NC","name":"North Carolina"},{"id":"34","code":"ND","name":"North Dakota"},{"id":"35","code":"OH","name":"Ohio"},{"id":"36","code":"OK","name":"Oklahoma"},{"id":"37","code":"OR","name":"Oregon"},{"id":"38","code":"PA","name":"Pennsylvania"},{"id":"39","code":"RI","name":"Rhode Island"},{"id":"40","code":"SC","name":"South Carolina"},{"id":"41","code":"SD","name":"South Dakota"},{"id":"42","code":"TN","name":"Tennessee"},{"id":"43","code":"TX","name":"Texas"},{"id":"44","code":"UT","name":"Utah"},{"id":"45","code":"VT","name":"Vermont"},{"id":"46","code":"VA","name":"Virginia"},{"id":"47","code":"WA","name":"Washington"},{"id":"48","code":"WV","name":"West Virginia"},{"id":"49","code":"WI","name":"Wisconsin"},{"id":"50","code":"WY","name":"Wyoming"}]; 
    programIdsDropDown = ; 
</script> 

我已經去除了編碼的結果並確認我得到一個不能轉換數組爲字符串錯誤。爲什麼這裏返回空白,導致前面提到的錯誤?

這是從2012年的Windows服務器移到2008年的Windows服務器,並在2012年完全正常運行的代碼。2008年有沒有這個JS調用的任何已知問題?這在AngularJS中使用,但在這個錯誤點是獨立於AngularJS,所以只是基本的JS/PHP。

非常感謝。

+0

'$ this-> programIdData'爲空。檢查一下,如果空着做別的事情。 – AbraCadaver

+0

你想讓這些變量包含實際的對象或JSON字符串嗎? – AbraCadaver

+0

由於AngularJS如何處理JSON對象。 Guillaume STLR爲我找到了解決方案,並在定時器通過後立即接受它。 – wavern

回答

2

如果json_encode返回一個空字符串,這可能是由於數據包含非ASCII字符。嘗試對其進行編碼以UTF-8這樣的:

<script> 
    statesDropDown = <?php echo json_encode($this->states);?>; 
    programIdsDropDown = <?php echo json_encode(array_map('utf8_encode', $this->programIdsData));?>; 
</script> 
+0

非常感謝。這是問題所在。任何想法爲什麼這可以在一個地方而不是另一個地方工作? – wavern

+0

你能給我生成的輸出嗎?我會告訴你爲什麼;-) –

+0

這是大約300個值,我假設有一個字符不友好,返回utf8。在兩種環境之間改變是很奇怪的。 – wavern

0

你可以做的是首先避免echojson_encode返回值。首先將它分配給一個php變量並檢查它是否爲空字符串,然後echo '[]'