【问题标题】:javascript ajax uncaught referenceerror functionjavascript ajax 未捕获的引用错误函数
【发布时间】:2013-06-23 21:50:34
【问题描述】:

当我调用这个函数时,我得到了标题错误。

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

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

【问题讨论】:

  • 试试user = "&lt;?php echo $user; ?&gt;";。注意 php 标签周围的引号
  • 参考@MarcB的回答,你的一些javascript变量需要引号,否则你会得到一个语法错误
  • 不知道它是否简单,但我可以更改 sucess 函数以重新加载调用 javascript 的 div 吗?

标签: php javascript function variables referenceerror


【解决方案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); ?>;

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

baz = "bar";

【讨论】:

    【解决方案2】:

    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>
    

    旁注:

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

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多