Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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在MVC中调用php函数?_Php_Jquery_Ajax_Model View Controller - Fatal编程技术网

使用AJAX在MVC中调用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

我目前正在将一个已经构建好的web应用程序迁移到MVC,我发现我太新手了,不能做一些更改。有一些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)!");
    }
});
我的问题来了,因为我已经没有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
的表单使用Jquery
serialize
方法序列化

.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
的表单使用Jquery
serialize
方法序列化

.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_