我在调用此函数时遇到了tittle错误。
<script type="text/javascript">
function upvote(user, id){
fazer = <?php echo $doornot ?>;
if( fazer == 'true'){
window.location = "http://www.dawnsource.com/forums/register.php";
}else {
user = <?php echo $user; ?>;
id = <?php echo $_GET[id]; ?>;
$.ajax({
url: 'scripts/upvote.php',
type: 'post',
data: 'user='+user+'&id='+id,
success: function()
{
alert('success, upvote completed ');
}, error: function()
{
alert('something went wrong, rating failed');
}
});
}
}
</script>
错误正在发生:
user = <?php echo $user; ?>;
但它让我在回声中获得了正确的值。为什么会发生这种情况?
php数据中缺少引号,因此生成了无效的javascript。回想起PHP输出的任何内容都必须在javascript上下文中是正确的。
<?php
$foo = 'bar';
?>
<script>
baz = <?php echo $foo ?>;
</script>
将生成
baz = bar;
并且CCD_ 1将被解释为未定义的变量名称。
正确的解决方案是简单地将PHP中的所有内容作为json:传递
bar = <?php echo json_encode($foo); ?>;
无论$foo中有什么,它都将始终生成有效的javascript。并产生
baz = "bar";
如果$doornot
为布尔值,则true
应为布尔值。此外,在PHP和JavaScript中,字符串引号在返回值时都会被剥离。您的JavaScript看到另一个变量,而不是字符串。尝试:
<script type="text/javascript">
function upvote(){
var fazer = <?php echo $doornot ?>;
if(fazer == true){
window.location = 'http://www.dawnsource.com/forums/register.php';
}
else {
var user = '<?php echo $user; ?>';
var id = '<?php echo $_GET[id]; ?>';
$.ajax({
url: 'scripts/upvote.php',
type: 'post',
data: 'user='+user+'&id='+id,
success: function(){
alert('success, upvote completed');
},
error: function(){
alert('something went wrong, rating failed');
}
});
}
}
</script>
旁注:
我看不出在upvote
函数中使用user
或id
参数,因为您是从PHP获取这些值的,并且仅在一个条件下。此外,您应该在JavaScript中使用关键字var
,除非您希望这些变量是全局的。