【问题标题】:Calling javascript function in my PHP code在我的 PHP 代码中调用 javascript 函数
【发布时间】:2017-05-20 05:14:07
【问题描述】:

我在 stackoverflow 上搜索了一些问题并使用了建议的解决方案,但是,我似乎无法让我的 php 代码按照我想要的方式工作。

当我访问projects.php?message=success 或projects.php?message=removed 时,JavaScript 函数没有执行。在我的调试中,我通过将 JavaScript 附加到具有 onclick 属性的按钮上来确认 JavaScript 工作正常。

我的php代码:

<?php 
function GET($key) {
    return isset($_GET[$key]) ? $_GET[$key] : null;
}

$alert= GET('message');
if ($alert == success) {
    echo '<script type="text/javascript"> window.onload=success(); </script>';
} elseif ($alert == removed) {
    echo '<script type="text/javascript"> window.onload=removed(); </script>';
}

?>

我的 JavaScript 代码:

    <script>
    function success() {
        $.notify({
            // options
            icon: "pe-7s-cloud-upload",
            message: 'New project entry was successfully added.' 
        },{
            // settings
            type: 'success'
        });
    }
    function removed() {
        $.notify({
            // options
            icon: "pe-7s-trash",
            message: 'Project entry was successfully deleted.' 
        },{
            // settings
            type: 'danger'
        });
    }
</script>

【问题讨论】:

  • 您的具体问题是什么?
  • if ($alert == "success") 注意引号。
  • 按钮与任何事物有什么关系。 “发布您的代码”并不意味着发布任何任意代码,而是发布相关代码。如果问题与按钮有关,为什么我们看不到任何按钮代码?
  • @Iwrestledabearonce。他说他使用了一个按钮来确认 JS 代码是否有效。两者都与导致问题的原因无关。
  • @SamiAji 社区不接受你因为没有正确测试 PHP 代码而错过了一个明显的错误。

标签: javascript php jquery


【解决方案1】:

您需要在文本周围加上引号并正确设置window.onload:

<?php 
function GET($key) {
    return isset($_GET[$key]) ? $_GET[$key] : null;
}

$alert = GET('message');
echo "<script>window.onload = function () { ";
if ($alert == "success") echo "success();";
else if ($alert == "removed") echo "remove();";
echo " };</script>";
?>

如果你只需要这两个,你也可以这样做:

$alert = GET('message');
if ($alert == "success" || $alert == "remove") {
    echo "<script>window.onload = $alert;</script>";
}

编辑:
为了澄清 cmets 的一个问题:将window.onload 设置为一个函数,一个不能使用

window.onload = myFunc();  // WRONG!

(这将调用该函数,然后将 window.onload 设置为 result)

正确的做法是:

window.onload = myFunc;
// OR
window.onload = function () {
  myFunc();
};

【讨论】:

  • 第一个解决方案实现了我的目标,非常感谢您。但是第二个(简化的)解决方案不起作用。
  • 这段代码有一个新问题。当我访问projects.php 时,我被重定向到projects.php?=removed。如果我使用 ?message=success 或 ?message=removed 访问,它可以正常工作。如果我访问一个随机密钥 URL,例如 ?message=fakeaddress,我会看到访问 projects.php 时应该看到的正确页面。通过用 if ($alert != null) 包围代码来解决
  • @SamiAji 您的剩余代码中有错误,所以您编辑我的答案...?没有。你没有。我的代码中没有任何东西能够重定向,当我在没有参数的情况下测试我的代码时,它会产生&lt;script&gt;window.onload = function () { };&lt;/script&gt;,完全符合它的要求。
  • @SamiAji 我还应该注意第二个较短的版本确实对我有用。无论发生了什么问题,它都不在我的代码中。您必须将被调用的函数放在更早的 &lt;script&gt; 中才能正常工作。
  • 我无意贬低你或对你无礼,请不要这样想。我用对我有用的解决方案编辑了代码,以便其他有同样问题的人遇到这个问题可能会找到适合的解决方案。谢谢你的帮助..
【解决方案2】:

我测试过的是您使用的不存在的常量,称为成功。 正如@Chris G 所说

更改 if 为:

if ($alert == "success")

【讨论】:

    猜你喜欢
    • 2013-02-05
    • 1970-01-01
    • 2012-11-06
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多