用Ajax运行php函数
我在html上有如下按钮:用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) {
<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和面向对象编程,这就是为什么我还没有使用现成的框架。任何框架的一个关键点是一个入口点,所有请求都必须经过一个公共位置,这允许您“加载”框架,无论请求如何。一切都应该通过入口点,然后路由器将其委托给适当的控制器处理。我有一个简单路由器的例子