首页 > 解决方案 > Codeigniter 4 ajax发布到控制器方法不起作用

问题描述

我知道有很多类似的问题,但到目前为止似乎没有任何帮助。

所以,我在二维码扫描仪功能中有 AJAX POST。POST 会将“字符串 A”发送到 CI4 控制器并返回“字符串 B”到视图。

查看 ( scan-attendance.php):

            qrcode.callback = (res) => {
                if (res) {
                    outputData.innerText = res;
                    console.log(res);

                    $.ajax({
                        url: '<?php echo base_url("pengran/absen") ?>',
                        type: 'post',
                        dataType: 'json',
                        data: {
                            res: res
                        },
                        success: function(data) {
                            console.log(data);
                        }
                    });
                }
            };

路线 ( Routes.php):

$routes->group('pengran', function ($routes) {
    $routes->post('absen', 'OfficialController::verify_attendant');
});

控制器('官方控制器')

class OfficialController extends BaseController
{
    public function verify_attendant()
    {
        d("#1");
        if ($this->request->isAJAX()) {
            $query = service('request')->getPost('res');
            d($this->request->getPost('res'));
        }
        d("#2");
        // doing some CRUD and getting some data from database... let's say, $result = "String B"
        $result = "String B";

        return view('pengran/scan-attendance', $result);
    }
}

我曾经收到 500 个内部服务器错误,但在修改了代码之后,现在错误消失了,但似乎verify_attendant()从未调用过。我从来没有在浏览器控制台中得到“#1”,更不用说 CRUD 并以“String B”返回视图。

请帮忙

标签: phpajaxpostcodeigniter-4

解决方案


如果我没看错的话,我想你期待这个 AJAX 调用用新视图刷新你的页面吗?它不会那样做(至少不会这样)。

AJAX 调用发送一个 HTTP 请求,作为回报,期望从服务器返回某种响应。如果请求被认为是成功的,它也期望某种数据作为回报。它期望返回的数据类型由dataType您在此处指定为 JSON 定义。

在您的 Controller 方法中,您返回了一个视图,我猜该视图不是有效的 JSON 格式。AJAX 调用正在取回这些数据,意识到它不是有效的 JSON 并做出调用实际上失败的决定。根据 JQuery 的 .ajax文档

JSON数据被严格解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。

不幸的是,您现在对任何类型的失败情况视而不见,因为您从未实现 AJAX 对象的error选项。您应该始终在 AJAX 调用中实现它以捕获故障,但同样,仅此一项并不能解决问题;我认为这里对 AJAX 的一般作用存在更大的误解。


推荐阅读