Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Ajax运行php函数_Php_Ajax_Oop_Cookies - Fatal编程技术网

用Ajax运行php函数

用Ajax运行php函数,php,ajax,oop,cookies,Php,Ajax,Oop,Cookies,我在html上有如下按钮: <button class="uk-button uk-button-primary uk-modal-close confirm-rules" type="button" onclick="sendStatus('accept_rules')">Rozumiem</button> <script type="text/javascript"> function sendStatus(status) {

我在html上有如下按钮:

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

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');

    }

}
Rozumiem
当我点击按钮时,就会调用php中的函数。 我尝试通过ajax这样做:

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

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');

    }

}

功能发送状态(状态){
$.ajax({
方法:“张贴”,
url:“Controllers/Core/Dashboards/Admin/Dashboard.php”,
数据:{状态:状态}
}).done(函数(msg){
警报(“保存的Cookie:+msg”);
});
}
问题在于php文件,因为它看起来像这样:

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

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');

    }

}

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

请始终确保您的PHP类具有您当前所在的文件名()。类的名称是
AdminDashboard
,因此请调用文件
AdminDashboard.php
,以避免混淆。另外,通常的做法是使用click事件,而不是调用函数
onclick=

要让PHP只调用函数
acceptDashboardBox()
,您需要一个新的端点/文件,该端点/文件与您的函数相同,而无需其他操作

我建议您返回一个带有状态的json,并捕获异常,如果出现指示发生错误的情况,则设置状态。您可以在javascript中检查json,并检查操作是否成功。比如:

{
    status: "success"
}


我会做这笔交易的

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