php - 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”返回视图。
请帮忙
解决方案
如果我没看错的话,我想你期待这个 AJAX 调用用新视图刷新你的页面吗?它不会那样做(至少不会这样)。
AJAX 调用发送一个 HTTP 请求,作为回报,期望从服务器返回某种响应。如果请求被认为是成功的,它也期望某种数据作为回报。它期望返回的数据类型由dataType
您在此处指定为 JSON 定义。
在您的 Controller 方法中,您返回了一个视图,我猜该视图不是有效的 JSON 格式。AJAX 调用正在取回这些数据,意识到它不是有效的 JSON 并做出调用实际上失败的决定。根据 JQuery 的 .ajax文档:
JSON数据被严格解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。
不幸的是,您现在对任何类型的失败情况视而不见,因为您从未实现 AJAX 对象的error
选项。您应该始终在 AJAX 调用中实现它以捕获故障,但同样,仅此一项并不能解决问题;我认为这里对 AJAX 的一般作用存在更大的误解。
推荐阅读
- twig - Using Twig to access HTML content
- javascript - 为什么这个 console.log() 函数不起作用?
- c++ - 是否有在模板中使用数值的有效方法?
- c# - .NET 运行时错误 80131506 - 将 Lambda 传递给本机函数
- python - “变换”Numpy 数组:移动维度
- winforms - 继承和自定义 Windows 窗体轨迹栏控件
- node.js - 如何禁用 express + mongodb 使用的 ssl3
- netsuite - netsuite suitescript2.0 inventorycount
- python - PyQt5 的 PyQt5.sip 文件不是由 SIP 库生成的
- filesystems - 是否可以在任何地方创建 >8 EiB 稀疏文件?