【问题标题】:Run php function by Ajax通过 Ajax 运行 php 函数
【发布时间】:2019-01-31 16:46:34
【问题描述】:

我在 html 上有这样的按钮:

<button class="uk-button uk-button-primary uk-modal-close confirm-rules" type="button" onclick="sendStatus('accept_rules')">Rozumiem</button>

当我点击按钮时,我想这样做,php中的函数将被调用。 我尝试通过 ajax 这样做:

    <script type="text/javascript">
    function sendStatus(status) {
        $.ajax({
            method: "POST",
            url: "Controllers/Core/Dashboards/Admin/Dashboard.php",
            data: { status: status }
        }).done(function( msg ) {
            alert("Cookie saved:" + msg );
        });
    }
</script>

问题在于 php 文件,因为它看起来像这样:

    <?php

declare(strict_types=1);

namespace App\Controllers\Core\Dashboards\Admin;

use App\Controllers\Controller;

use App\Core\SessionManagement;
use App\Core\Request;
use App\Core\Cookies;

class AdminDashboard extends Controller
{

    private $cookies;

    /**
     * AdminDashboard constructor.
     * @param Cookies $cookies
     */
    public function __construct(Cookies $cookies)
    {
      $this->cookies = $cookies; 
    }

    public function acceptDashboardBox()
    {
        if ( isset($_POST['status']) )
        {
            $this->cookies->add( $_POST['status'], 'true', 'time() + (365 * 24 * 60 * 60)');
        }
    }

    /**
     *
     */
    public function index() : void
    {

        Controller::renderView('Core/Dashboards/Admin/Dashboard');

    }

}

按钮必须在类 AdminDashboard 上运行函数 acceptDashboardBox()。 我该怎么做?

【问题讨论】:

  • App\Controllers\Controller CI 是什么框架?在任何情况下,通常使用 MVC 框架,您永远不会直接调用Dashboard.php,而是调用Dashboard,或者如果没有HTACCESS,它实际上会类似于index.php/Dashboard,然后框架会将其路由到控制器中。所以我很困惑。
  • 我使用了自己的框架。我只是在学习 mvc 和面向对象的编程,所以我还没有使用现成的框架。
  • 任何框架的一个关键点是入口点,这是所有请求都必须经过的公共位置,这使您可以“加载”您的框架,无论请求如何。一切都应该通过入口点,然后路由器将其委托给适当的控制器处理。我在GitHub 上有一个简单路由器的示例

标签: php ajax oop cookies


【解决方案1】:

当调用你的文件Controllers/Core/Dashboards/Admin/Dashboard.php 时,什么都不会发生,因为没有调用函数acceptDashboardBox() 或此文件中的任何其他内容。

请始终确保您的 PHP 类确实具有您当前所在文件的名称 (PSR-4)。您的班级名称是AdminDashboard,因此请调用您的文件AdminDashboard.php 以避免混淆。此外,将Event Listeners 用于点击事件而不是调用函数onclick= 也是常见的做法。

要让 PHP 只调用你的函数 acceptDashboardBox(),你需要一个新的端点/文件,它与你的函数一样,仅此而已。

我建议您返回一个带有状态的 json 并捕获设置状态的异常(如果发生表明发生错误的事情)。您可以检查 javascript 中的 json 并检查操作是否成功。比如:

{
    status: "success"
}

{
    status: "failure"
}

会做这笔交易。

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 2021-08-16
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多