PHP Javascript未捕获的语法错误:意外的标记ILLEGAL。

4
我有一个PHP脚本,但它不能正常工作。错在哪里?
<?php
if ( isset($success) || isset($failure) ) {
?>
<script>
    $(document).ready(function(){
        $('div.aler').css('display','block');
        $("div.aler").html("<?php if($success){echo '<p class=\"success\">'.$success.'</p>';} elseif($failure) {echo '<p class=\"failure\">'.$failure.'</p>';}; ?>");
        setTimeout(function(){
            $("div.aler").fadeOut("slow", function (){
                $("div.aler").remove();
            });
        }, 5000);
    });
</script>
<?php }  

我认为引号可能存在问题:

" . $failure

有消息,但JavaScript没有将其放入HTML div中:

div.aler

我在Chrome控制台中看到以下错误信息:
未捕获的SyntaxError: 非法令牌意外出现。

1
你必须对引号进行双重编码,\\",以便结果包含JavaScript字符串的 \"。查看生成的HTML,你就会看到。 - Felix Kling
1
尝试在 PHP 中转义任何 ",像这样 \\",看看会发生什么。或者将它们更改为单引号 '。或者甚至是 \" - Funk Forty Niner
@FelixKling,它没有将任何内容放入div中,因此我无法使用HTML源代码进行检查。但是我会尝试使用双引号对我的引号进行编码。谢谢。 - Peyman Mohamadpour
@FelixKling 我对 " 进行了双重编码,但是没有任何变化。 - Peyman Mohamadpour
4个回答

6

PHP输出中的双引号未进行转义,因此需要使用\\\"或\'代替\"。

顺便说一下,使用json_encode作为字符串会更好...

$("div.aler").html(<?php
    if($success){
        echo json_encode('<p class="success">'.$success.'</p>');
    }
    elseif($failure){
        echo json_encode('<p class="failure">'.$failure.'</p>');
    };?>
);

@Arash,问题出在你的复制粘贴技能上,而不是这段代码本身。(我在发布前已经测试过了。) - inf3rno

2

在下面的代码行中,您忘记了isset,由于您在第一个if语句中使用了"||"(或),因此它是必需的。 PHP会抛出一个错误,导致您的JavaScript出现问题。

$("div.aler").html( "<?php if( $success ){ echo '<p class=\"success\">'.$success.'</p>';}elseif($failure){echo '<p class=\"failure\">'.$failure.'</p>';}; ?>");

将此更改为...

$("div.aler").html( "<?php echo ( isset( $success ) ) ? '<p class=\"success\">'.$success.'</p>' : '<p class=\"failure\">'.$failure.'</p>'; ?>");

是的,还要不要忘记转义成功或失败消息中的引号,使用'addslashes'函数。 - bystwn22
这显然取决于错误的服务器设置。(display_error等...)我投赞成票,因为我收到了未定义变量错误消息,但是我在那之后声明了变量。不知道可能不调试这样的东西... - inf3rno

1
您试图将其放入div.alert中...但在您的代码中,您写了“div.aler”,缺少一个T...

0
$("div.aler").html("<p class='<?=$success? 'success' : 'failure'?>'><?=$success? $success : $failure?></p>");

当然,在输出之前要转义$success$failure


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接