2016-04-28 140 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