未捕获的SyntaxError:意外的令牌}

时间:2014-02-18 20:52:56

标签: php syntax-error

我试图弄清楚一小时后的错误,但我无法找到错误! 任何人都可以告诉我为什么我一直收到Uncaught SyntaxError: Unexpected token }错误?

这是我的PHP:

echo "<p style='color: orange; font-size: 25px;'>{$result['Topic']} - <button type='button' onclick='window.location.href='resources.php?subj={$result['Subject']}'' class='btn btn-sm btn-success pull-right'>Resources</button>&nbsp;<button onclick='window.location.href='questions.php?subj={$result['Subject']}''  class='btn btn-sm btn-success pull-right' style='margin-right: 10px;'>Questions</button> <button onclick='window.location.href='assessment.php?topic={$result['Topic']}''  class='btn btn-sm btn-success pull-right' style='margin-right: 10px;'>Assessment</button></p><hr/>";

请帮忙。 :(

5 个答案:

答案 0 :(得分:2)

有几个引号未被转义,即使您确实转义了当前导致错误的双引号,呈现的HTML标记仍会出现错误,因为您在其中使用了单引号属性和JavaScript字符串。这样你的JS可能也不会起作用。例如:

<button onclick='window.location.href='resources.php?subj=%s''>…</button>

事实上,您的代码是一个很好的例子,为什么应该避免在字符串中使用变量。每次我需要在PHP中使用双引号时我都会觉得我做错了。也许模板引擎对您有用。最简单的版本是使用sprintf输出那种字符串:

$template = <<<EOTEMPLATE
    <p style="color: orange; font-size: 25px;">%s -
        <button type="button" onclick="window.location.href=\'resources.php?subj=%s\'" class="btn btn-sm btn-success pull-right">Resources</button>
        <button onclick="window.location.href='questions.php?subj=%s'" class="btn btn-sm btn-success pull-right">Questions</button>
        <button onclick="window.location.href='assessment.php?topic=%s'" class="btn btn-sm btn-success pull-right">Assessment</button>
    </p>
    <hr/>
EOTEMPLATE;

echo sprintf( $template, $result['Topic'], $result['Subject'], $result['Subject'], $result['Topic'] );

下一个优化迭代将删除那些内联JS片段并将它们粘贴到单个JS块中(甚至更好:一个单独的* .js文件)。但是,由于您只是加载另一个页面,一个简单的链接也可以。以下代码段也应该按照您的输入建议。 (因为链接也可以看起来像一个按钮。)

$template = <<<EOTEMPLATE
    <p class="btn-group">%s –
        <a href="resources.php?subj=%s" class="btn btn-sm btn-success pull-right">Resources</a>
        <a href="questions.php?subj=%s" class="btn btn-sm btn-success pull-right">Questions</a>
        <a href="assessment.php?topic=%s" class="btn btn-sm btn-success pull-right">Assessment</a>
    </p>
    <hr/>
EOTEMPLATE;

echo sprintf( $template, $result['Topic'], $result['Subject'], $result['Subject'], $result['Topic'] );

然后,如果您仍然需要JavaScript(例如为这些按钮实现点击跟踪器),您可以添加一个事件处理程序来执行此操作:

<script>
// add an event listener to the document object to capture clicks on existing and future links
document.addEventListener( 'click', function( event ) {
    if( event.target.tagName === 'A' && event.target.classList.has( 'btn-success' ) ) {
        event.preventDefault();

        // do whatever you need to do with that link

        window.location.href = event.target.href;
    }
}, false );
</script>

(这个JS示例仅适用于现代浏览器,因为使用了"classList"

答案 1 :(得分:1)

你的问题是这些人$result['Topic']}''尝试类似的事情:

$topic = $result['Topic'];

然后在代码中使用topic=$topic

答案 2 :(得分:0)

我添加了一些转义双引号,试试运行:

echo "<p style='color: orange; font-size: 25px;'>{$result['Topic']} - 
<button type='button' onclick='window.location.href=\"resources.php?subj={$result['Subject']}\"' 
class='btn btn-sm btn-success pull-right'>Resources</button>&nbsp;<button onclick='window.location.href=\"questions.php?subj={$result['Subject']}\"'  
class='btn btn-sm btn-success pull-right' style='margin-right: 10px;'>Questions</button> 
<button onclick='window.location.href=\"assessment.php?topic={$result['Topic']}\"'  class='btn btn-sm btn-success pull-right' 
style='margin-right: 10px;'>Assessment</button></p><hr/>";

答案 3 :(得分:0)

尝试这样

echo '<p style="color: orange; font-size: 25px;">'.$result['Topic'].' - 

    <button type="button" 
    onclick="window.location.href=\'resources.php?subj='.$result['Subject'].'\'" 
    class="btn btn-sm btn-success pull-right">Resources</button>&nbsp;

    <button 
    onclick="window.location.href=\'questions.php?subj='.$result['Subject'].'\'"  
    class="btn btn-sm btn-success pull-right" style="margin-right: 10px;">Questions</button> 

    <button 
    onclick="window.location.href=\'assessment.php?topic='.$result['Topic'].'\'"  
    class="btn btn-sm btn-success pull-right" style="margin-right: 10px;">Assessment</button></p><hr/>';

答案 4 :(得分:0)

如上所述,您正在嵌套单引号,并使HTML语法复杂化以绕过您对引号的使用。如果您要输出这么多HTML,heredoc总是有用的。如果您的编辑器像我一样聪明,它会在块中为您提供HTML语法高亮显示!

    echo <<< HTML
<p style="color: orange; font-size: 25px;">
    $result[Topic] -
    <button type="button" onclick="window.location.href='resources.php?subj=$result[Subject]'" class="btn btn-sm btn-success pull-right">
        Resources
    </button>
    &nbsp;
    <button onclick="window.location.href='questions.php?subj=$result[Subject]'" class="btn btn-sm btn-success pull-right" style="margin-right: 10px;">
        Questions
    </button>
    &nbsp;
    <button onclick="window.location.href='assessment.php?topic=$result[Topic]'" class="btn btn-sm btn-success pull-right" style="margin-right: 10px;">
        Assessment
    </button>
</p>
<hr/>

HTML;