2016-04-28 138 views
0

這是工作,畢竟這是一個語法錯誤,但我想知道如何做到這一點,以便語法是正確的。語法錯誤輸出php到javascript

以下代碼是準備在Ajax調用中發送變量的腳本的一部分,因此根據範圍將相應的變量傳遞給Ajax。

從javascript的角度來看,問題似乎是,只有每個範圍的php變量被定義。

我會認爲它不會試圖解析如果條件不符合,但顯然情況並非如此。 php變量$ scope始終被定義。

無論放火和Chrome開發者工具都扔了錯誤:

    var scope_var = <br /> 
<b>Notice</b>: Undefined variable: brand in <b>/Applications/MAMP/htdocs/my_site/my_script.php</b> on line <b>1049</b><br />null; 

感謝

 var scope = <?php echo json_encode($scope) ;?>; 
     if (scope == 'all') {var scope_var = 'all';} 
     else if (scope == 'brands') {var scope_var = <?php echo json_encode($brand) ;?>;} 
     else if (scope == 'cities') {var scope_var = <?php echo json_encode($city) ;?>;} 
     else if (scope == 'models') {var scope_var = <?php echo json_encode($model) ;?>;} 
     else if (scope == 'prange') {var scope_var = <?php echo json_encode($used_prange_low) . '|' . json_encode($used_prange_high) ;?>;} 
+0

使用單引號var scope_var ='<?php echo json_encode($ brand);?>'; –

+0

你確定$品牌是定義的嗎?嘗試在if語句之前打印它。 –

回答

1

從你的代碼看你expecing您輸出從PHP到JS值作爲字符串收到。如果是這種情況,則需要將所有PHP語句包裝在引號中。試試這個:

var scope = '<?php echo json_encode($scope); ?>'; 
if (scope == 'all') { 
    var scope_var = 'all'; 
} else if (scope == 'brands') { 
    var scope_var = '<?php echo json_encode($brand); ?>'; 
} else if (scope == 'cities') { 
    var scope_var = '<?php echo json_encode($city); ?>'; 
} else if (scope == 'models') { 
    var scope_var = '<?php echo json_encode($model); ?>'; 
} else if (scope == 'prange') { 
    var scope_var = '<?php echo json_encode($used_prange_low) . ' | ' . json_encode($used_prange_high); ?>'; 
} 

還要注意switch語句可能會滿足您的需求不是多個else if條件較好。

+0

謝謝,添加引號只會改變錯誤,或者更加註意。它現在變成了「未終止的字符串文字」。所以這不會解決它。但我會對開關事情感興趣。這聽起來更有希望。 – BernardA

+0

交換機也不會削減它。還是一樣的錯誤。它似乎無法處理,如果該變量沒有被定義爲開始,即使條件不符合 – BernardA

+1

您可以使用json_encode的JSON_HEX_QUOT選項。這裏是示例json_encode($ scope,JSON_HEX_QUOT)。它將管理報價和「未終止的字符串文字」問題將得到解決。希望它可以幫助。 – BugCoder