【问题标题】:How do I fix JS 'unterminated string literal' error如何修复 JS '未终止的字符串文字'错误
【发布时间】:2013-07-18 15:11:42
【问题描述】:

我的网站上有一个表单,当用户单击提交时,在提交表单之前运行一些基本的 JS 验证,但是在检查某些字段时我收到错误“未终止的字符串文字”。

我了解这个错误是什么(在这种情况下,用户在文本区域中添加换行符)但我想不出避免/修复它的方法。

这是我声明表单的方式 -

<form id="<?php echo $form_name; ?>" 
      name="<?php echo $form_name; ?>" 
      class="standard-form" 
      method="POST" action="" 
      onsubmit="return validate_form('<?php echo $form_name; ?>')">

这就是我如何检查给我带来麻烦的字段 -

var your_query = document.forms['enquiry']['your_query'].value
if(your_query === ''){
    result = false;
}

如有任何帮助,将不胜感激。

谢谢。

【问题讨论】:

  • 未终止的字符串文字通常是由 JavaScript 表达式中使用的未转义值引起的,但您发布的代码中没有任何内容(除非您有一个疯狂的表单名称)--你是确定您发布了错误发生的位置?
  • @Richards 的回答似乎合乎逻辑。如果这对您不起作用,则此 SO 帖子包含许多需要检查的内容:stackoverflow.com/questions/227552/…
  • 这种情况下的错误是因为用户有时会在'your_query'字段中添加换行符,这是一个文本区域。您是对的,尽管在此过程中生成的错误比我最初想象的要晚一点,但此时我正在制作一个要传递给 AJAX 页面的对象 - 通过 PHP 编写一个具有换行符的值实际上是什么造成这种情况,而不是简单的换行符。
  • @Dave Newton - return validate_form('&lt;?php echo $form_name; ?&gt;') 不是 JavaScript 表达式中使用的未转义值吗?
  • @RichardJPLeGuen "[...] 除非你有一个疯狂的表单名称 [...]"

标签: javascript


【解决方案1】:

我的猜测是$form_name 包含一个单引号字符:'

首先,您真的应该使用htmlentitiesjson_encode 转义该输出:

<form id="<?php echo htmlentities($form_name); ?>"
      name="<?php echo htmlentities($form_name); ?>"
      class="standard-form"
      method="POST"
      action=""
      onsubmit="return validate_form(<?php echo htmlentities(json_encode($form_name)); ?>)">

另见Pass a PHP string to a Javascript variable (including escaping newlines)

接下来,不要使用 onsubmit intrinsic event attribute 并且不要将表单名称传递给它;在 JavaScript 文件中使用正确的 DOM 脚本(或 jQuery)和事件处理:

(function() {
    var form = document.getElementById("<?php echo json_encode($form_name); ?>");
    form.addEventListener('submit', onSubmit, false);

    function onSubmit() {
        // manipulate variable `form` as necessary
        // without having to pass around a `form_name`
    }
}());

【讨论】:

  • 不得不改正; json_encode 在 JavaScript 中不需要引号
  • 感谢您的建议。我会接受你所说的关于不使用 onSumbit() 的说法(可能不是今天!),但与此同时,'json_encode()' 让我摆脱了最初的错误(谢谢),但现在我们回来了在 PHP 方面,我所有的值都被包装了(/“{value}/”),而 'json_decode()' 并没有像我想象的那样返回它。有什么建议吗?
  • @Daveid Gard - 在 PHP 方面,我不理解你的意思。
  • 我正在使用 AJAX,当我使用 PHP 在 JS 中输出时发生错误('json_encode()' 解决了这个问题),因此传递了一个对象并填充了 '$_POST',但是 '$_POST' 中的所有值现在都是 json 编码并在 PHP 中导致错误。
  • json_decode 他们可能吗? ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多