我在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()。我怎么能做到这一点?
发布于 2018-08-26 06:00:22
当调用您的文件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"
}
会做这笔交易。
https://stackoverflow.com/questions/52017409
复制相似问题