使用PHP在浏览器中有条件地呈现Javascript函数调用


Use PHP to conditionally render a Javascript function call in the browser

我有一个按钮,它在点击时成功触发"加载更多"。一旦点击,就会设置SESSION变量,这样当用户重新加载页面时,新帖子应该显示为已经加载,这样用户就不需要再次点击"加载更多"。

因此,我想在PHP IF语句中呈现相同的"加载更多"Javascript函数,这取决于是否设置了SESSION或COOKIE:

<?php
if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))){
echo '<script>loadmore(''posts'');</script>';
}
else {
echo '<a href="#" onClick="return false" onmousedown="javascript:loadmore(''posts'');" class="btn btn-primary" id="load-more-btn">Load More</a>';
}
?>

然而,一旦页面被呈现,Javascript就不会被触发。我做错了什么?

正如@Austin和@Angry Coder所说,请检查您的控制台是否存在错误。

此外,请确保在调用函数loadmore()之前已对其进行了定义。因此,要么将函数声明放在loadmore('posts');调用之上,要么将调用添加到onload或类似的对象上。

另一件事,也许为了清晰起见,你可以像这样写代码(但这是一种意见):

<?php  if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))) { ?>
        <script>loadmore('posts');</script>
<?php } else { ?>
        <a href="#" onClick="return false" onmousedown="javascript:loadmore('posts');" class="btn btn-primary" id="load-more-btn">Load More</a>
 <?php } ?>

要自动运行JavaScript,可以使用onLoad事件,如

<body onload="loadmore('posts')">
...
</body>

或者

<body onload="conditionally_loadmore('posts')">
<?php
if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))){
    // Only have the function do something if we really want to.
    echo '<script>function conditionally_loadmore(s) {';
    echo ' loadmore(s); ';
    echo '}</script>';
}
else {
    echo '<script>function conditionally_loadmore(s) {';
    echo ' // Do nothing. ';
    echo '}</script>';
    echo '<a href="#" onClick="return false" onmousedown="javascript:loadmore(''posts'');" class="btn btn-primary" id="load-more-btn">Load More</a>';
}
?>

或者,正如@Astaroth所建议的:

<body
    <?php
      if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))) {
        echo 'onload="loadmore(''posts'')"';
      }
    ?>
>...