【问题标题】:Uncaught SyntaxError: Unexpected identifier with php未捕获的 SyntaxError:php 的意外标识符
【发布时间】:2016-05-04 16:32:53
【问题描述】:

当我将数组值放入脚本变量时,我的以下代码在没有 php 的情况下运行良好。但在 php 中它是 console.log Uncaught SyntaxError: Unexpected identifier。请帮我找出我的错误。

<!DOCTYPE html>
 <html lang="en">
 <head>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<?php
    $availableName = array("ActionScript","AppleScript","Asp","BASIC","C","C++","Clojure","COBOL","ColdFusion","Erlang","Fortran","Groovy","Haskell"); 
    $availableName = json_encode($availableName);
    echo "<script type=\"text/javascript\">";
    echo "  $(function() {";
    echo "    var allTags =" . $availableName;
    echo "    $( \"#tags\" ).autocomplete({";
    echo "      source: allTags";
    echo "    }); }); </script>"; 
    ?>
</head>
<body>
<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>
</body>
</html>

【问题讨论】:

  • PHP 是一种服务器端语言。浏览器 JavaScript 是一种客户端。他们根本不互动。如果你有 JavaScript 语法错误,你至少应该看看 View Source 并看看你的 JavaScript 代码是什么样子的。
  • \"text/javascript\" 这就是问题所在。而不是用单个 cuotes 替换 scaping 并且它可以工作

标签: php jquery jquery-ui syntax-error


【解决方案1】:

在这种情况下,$ 不应该有害。如果我猜对了,在浏览器中执行输出时会出现问题(因此是 JavaScript 错误,而不是 PHP 错误)。

您将 JavaScript 全部放在一行中,因此您需要在末尾添加一个分号(在“Haskel”之后])

代替

echo "    var allTags =" . $availableName;

试试这个:

echo "    var allTags =" . $availableName . ";";

【讨论】:

    【解决方案2】:

    我认为这是因为$(function()$( \"#tags\" ) 而发生的

    php 会将其读取为变量,然后您会出错。

    例子:

    $abc = "test";
    echo "$abc123"; //test123
    

    要修复它,将双引号 " 更改为单引号 '

    【讨论】:

      【解决方案3】:

      我认为这可能与许多引号被不正确地转义有关。或者,我可能会将其编码如下,这样可以减少 PHP 到 javascript 的翻译混乱,从而提供看起来更紧凑、可读和简洁的额外好处。

      <!DOCTYPE html>
      <html lang="en">
      <head>
      <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
      <script src="//code.jquery.com/jquery-1.10.2.js"></script>
      <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
      <script type="text/javascript">
          $(function() {
              var allTags = <?php echo json_encode(array("ActionScript","AppleScript","Asp","BASIC","C","C++","Clojure","COBOL","ColdFusion","Erlang","Fortran","Groovy","Haskell")); ?>;
              $( "#tags" ).autocomplete({'source': allTags});
          });
      </script>
      

      您还会注意到我在autocomplete 选项对象中的对象键周围加了引号。对于较新的浏览器,这可能是一种过时的做法;但是,较旧的浏览器需要引用对象键才能正确解析 json 对象。我发现它仍然是一个很好的做法,因为它有助于避免快速浏览时混淆键和变量。

      【讨论】:

      • 我刚刚在 PHPFiddle 中测试了这个,它似乎没有任何错误。
      猜你喜欢
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多