Запуск функции php от Ajax - PullRequest
       0

Запуск функции php от Ajax

0 голосов
/ 25 августа 2018

У меня есть кнопка на 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');

    }

}

Кнопка должна запускать функцию acceptDashboardBox () в классе AdminDashboard. Как я могу это сделать?

1 Ответ

0 голосов
/ 26 августа 2018

При вызове вашего файла Controllers/Core/Dashboards/Admin/Dashboard.php ничего не произойдет, потому что ничто не вызывает функцию acceptDashboardBox() или что-либо еще в этом файле.

Пожалуйста, всегда проверяйте, есть ли у ваших PHP-классов имя файла, в котором вы находитесь ( PSR-4 ).Название вашего класса AdminDashboard, поэтому назовите ваш файл AdminDashboard.php, чтобы избежать путаницы.Также обычной практикой является использование прослушивателей событий для событий щелчка вместо вызова функции onclick=.

Чтобы позволить PHP вызывать только вашу функцию acceptDashboardBox(), вам потребуется новая конечная точка /файл, который делает то же самое, что и ваша функция, и ничего больше.

Я бы посоветовал вам вернуть json со статусом и перехватить исключения, которые устанавливают статус, если он встречается с чем-то, что указывает на ошибку.Вы можете проверить json в своем javascript и проверить, была ли операция успешной или нет.Что-то вроде:

{
    status: "success"
}

ИЛИ

{
    status: "failure"
}

сделает сделку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...