0

调用此函数时出现标题错误。

<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; ?>;

但它让我在回声中获得了正确的价值。为什么会这样?

4

2 回答 2

1

您在 php 数据周围缺少引号,因此您正在生成无效的 javascript。请记住...无论 PHP 输出的内容在 javascript 上下文中是否正确,都必须是正确的。

<?php
$foo = 'bar';
?>

<script>
baz = <?php echo $foo ?>;
</script>

将产生

baz = bar;

并将bar被解释为未定义的变量名。

正确的解决方案是简单地将所有内容作为 json 从 PHP 传递:

 bar = <?php echo json_encode($foo); ?>;

无论 $foo 中有什么,它总是会生成有效的 javascript。并生产

baz = "bar";
于 2013-06-23T21:54:49.943 回答
0

true如果是,应该是布尔值$doornot。此外,在 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>

边注:

我在函数中看不到您的userorid参数的用途upvote,因为您是从 PHP 中获取这些值的,并且仅在某种条件下。此外,您应该在 JavaScript 中使用关键字var,除非您希望这些变量是全局的。

于 2013-06-23T22:14:08.543 回答