使用AJAX在MVC中调用php函数?
我目前正在将一个已经构建好的web应用程序迁移到MVC,我发现我太新手了,不能做一些更改。有一些ajax调用让我很害怕。我会尽量讲清楚,但由于我缺乏经验,我不确定是否会把一些重要的信息泄露出去 关键是在旧的应用程序中,事情是这样的: 在php代码中:使用AJAX在MVC中调用php函数?,php,jquery,ajax,model-view-controller,Php,Jquery,Ajax,Model View Controller,我目前正在将一个已经构建好的web应用程序迁移到MVC,我发现我太新手了,不能做一些更改。有一些ajax调用让我很害怕。我会尽量讲清楚,但由于我缺乏经验,我不确定是否会把一些重要的信息泄露出去 关键是在旧的应用程序中,事情是这样的: 在php代码中: if ($action_user == 'show_alerts') { $list = array(); $query = "SELECT alert_type FROM alert_contact WHE
if ($action_user == 'show_alerts') {
$list = array();
$query = "SELECT alert_type FROM alert_contact WHERE NOT
deleted AND user_email=" . typeFormat($email);
$result = mysqli_query($db, $query) or die('Error in query "'.$query . '": ' . mysqli_error($db));
while ($db_field = mysqli_fetch_assoc($result)) {
$list[] = $db_field['alert_type'];
}
echo json_encode($list);
if ($action_user == 'show_alerts') {
$list = ModelUser::getAlertContact($act_email);
echo json_encode($list);//I predict that ajax don't reach this line, but not sure
}
在jquery代码中:
$.ajax({
type: 'POST',
url: 'userpost.php',
data: $('#userForm').serialize(),
cache: false,
dataType: 'json'
$.ajax({
type: 'POST',
url: 'index.php?option=users',
data: $('#userForm').serialize(),
cache: false,
dataType: 'json',
success: function(data) {
alert ('gotcha');
$.each(alertsarray, function(index, value) {
if ($.inArray(value, data) === -1) {
$("#sub" + value).prop("checked", false);
$('#alert' + value).removeClass("list_alert_sub");
}
else {
$("#sub" + value).prop("checked", true);
$('#alert' + value).addClass("list_alert_sub");
}
});
},
error: function(data) {
alert("¡Error (ajax)!");
}
});
我的问题来了,因为我已经没有userpost.php文件了,我必须将它发送到index.php并通过get请求调用我的用户组件,我不喜欢这样做,但我找不到其他方法。更糟糕的是,我根本不知道ajax是如何获得它所需要的变量的。这一定是一个相当基本的错误,但我认识到我在这一点上的技能不是很好。这就是我在我的版本中所做的:
在php代码中:
if ($action_user == 'show_alerts') {
$list = array();
$query = "SELECT alert_type FROM alert_contact WHERE NOT
deleted AND user_email=" . typeFormat($email);
$result = mysqli_query($db, $query) or die('Error in query "'.$query . '": ' . mysqli_error($db));
while ($db_field = mysqli_fetch_assoc($result)) {
$list[] = $db_field['alert_type'];
}
echo json_encode($list);
if ($action_user == 'show_alerts') {
$list = ModelUser::getAlertContact($act_email);
echo json_encode($list);//I predict that ajax don't reach this line, but not sure
}
在jquery代码中:
$.ajax({
type: 'POST',
url: 'userpost.php',
data: $('#userForm').serialize(),
cache: false,
dataType: 'json'
$.ajax({
type: 'POST',
url: 'index.php?option=users',
data: $('#userForm').serialize(),
cache: false,
dataType: 'json',
success: function(data) {
alert ('gotcha');
$.each(alertsarray, function(index, value) {
if ($.inArray(value, data) === -1) {
$("#sub" + value).prop("checked", false);
$('#alert' + value).removeClass("list_alert_sub");
}
else {
$("#sub" + value).prop("checked", true);
$('#alert' + value).addClass("list_alert_sub");
}
});
},
error: function(data) {
alert("¡Error (ajax)!");
}
});
任何帮助都将不胜感激,如果我错过了更多信息,请告诉我。提前谢谢
更新:
我取得了一些进展,但似乎没有找到真正的解决办法。现在我知道url必须是控制器,所以我使用了'components/userpost/controller.php',它到达了ajax调用,因为出现了成功警报。问题在于MVC方式,因为我将ajax发送给控制器,但由于我没有在页面中重新加载,所有包含都失败,因此它们显然没有被加载,并且我得到如下错误:
PHP警告:include(components/userpost/model.PHP):无法打开
流:中没有这样的文件或目录
/第3行的var/www/html/viewer_mvc/components/userpost/controller.php,
推荐人:
真的希望你们能告诉我我哪里失败了,如果在MVC中有一种特殊的方法来做这些事情。对于JQuery调用,它会向
index.php?option=users
发出一个带有JSON数据的POST请求。ID为userForm
的表单使用Jqueryserialize
方法序列化
.serialize()方法以标准URL编码表示法创建文本字符串。它可以作用于已选择单个表单控件的jQuery对象
现在来看PHP示例
if ($action_user == 'show_alerts') {
$list = ModelUser::getAlertContact($act_email);
echo json_encode($list);//I predict that ajax don't reach this line, but not sure
}
如果是另一个文件,则此代码将查找可能不再存在的变量,即是否存在$action\u user
变量
要开始重新实现它,您需要添加逻辑,以便它检查POST变量(如果您不使用框架代码)。因此,如果您有一个名为“name”的表单元素,那么它将在PHP脚本POST变量中可用
$_POST['name']
对于JQuery调用,它使用JSON数据向
index.php?option=users
发出POST请求。ID为userForm
的表单使用Jqueryserialize
方法序列化
.serialize()方法以标准URL编码表示法创建文本字符串。它可以作用于已选择单个表单控件的jQuery对象
现在来看PHP示例
if ($action_user == 'show_alerts') {
$list = ModelUser::getAlertContact($act_email);
echo json_encode($list);//I predict that ajax don't reach this line, but not sure
}
如果是另一个文件,则此代码将查找可能不再存在的变量,即是否存在$action\u user
变量
要开始重新实现它,您需要添加逻辑,以便它检查POST变量(如果您不使用框架代码)。因此,如果您有一个名为“name”的表单元素,那么它将在PHP脚本POST变量中可用
$_POST['name']
[如何使用AJAX在MVC中调用PHP函数]
$.ajax({
键入:“POST”,
url:“save user.php”,
数据:{fname:“manish”,电子邮件:manishkp@com,角色:“admin”},
成功:功能(数据){
控制台日志(数据);
如果(数据=='错误')
{
$(“#寄存器_错误”)。文本('必须填写…');
$(“#寄存器_错误”).show();
}
否则{
$(“#寄存器_错误”).hide();
$(“#注册成功”)。文本(“成功提交”);
$(“#注册成功”).show();
}
}
});代码>
[如何使用AJAX在MVC中调用PHP函数]
$.ajax({
键入:“POST”,
url:“save user.php”,
数据:{fname:“manish”,电子邮件:manishkp@com,角色:“admin”},
成功:功能(数据){
控制台日志(数据);
如果(数据=='错误')
{
$(“#寄存器_错误”)。文本('必须填写…');
$(“#寄存器_错误”).show();
}
否则{
$(“#寄存器_错误”).hide();
$(“#注册成功”)。文本(“成功提交”);
$(“#注册成功”).show();
}
}
});代码>
可能有助于提及您正在使用的框架,并在其中添加疑问,因为我没有使用任何框架。我所拥有的只是一个带有函数加载器($component)的文件,它将路由返回到我要加载的组件的控制器。我不知道什么是附加疑问句,你能告诉我它的用途吗?也许这就是我错过的?谢谢你的回答。可能有助于提及你正在使用的框架,并用它标记问题。我也没有使用任何框架。我所拥有的只是一个带有函数加载器($component)的文件,它将路由返回到我要加载的组件的控制器。我不知道什么是附加疑问句,你能告诉我它的用途吗?也许这就是我错过的?谢谢你的回答。谢谢你的回答。是的,如果($action\u user=='show\u alerts')我检查POST变量,那么该变量就在这个控制器中。无论如何,据我所知,以前在userpost.php中的变量现在在users/controller.php中,我将把我的ajax调用发送到那里,所以事情没有太大的变化。我真的不知道为什么$list数组没有被传递。你没有在Ajax调用中传递$list
。当我执行此echo json时,它会传递HTML表单dataSo_