使用Tabulator5+CodeIgniter4时,AJAX POST能否添加含CSRF的自定义数据?
解决CodeIgniter4下Tabulator POST请求添加CSRF Token和自定义数据的问题
完全可以给Tabulator的POST请求添加自定义数据,包括CodeIgniter4要求的CSRF Token,下面是具体的修改方案:
1. 获取CodeIgniter4的CSRF Token信息
CodeIgniter4默认会通过csrf_meta()函数在页面头部生成两个meta标签(如果你的模板里已添加这个函数),分别存储CSRF的名称和哈希值:
<meta name="csrf-token-name" content="csrf_test_name"> <meta name="csrf-token" content="xxxxxxxxxxxxxxxxxxxx">
用JS获取这两个值:
const csrfName = document.querySelector('meta[name="csrf-token-name"]').content; const csrfHash = document.querySelector('meta[name="csrf-token"]').content;
2. 修改Tabulator配置,添加CSRF Token和自定义POST数据
直接在ajaxParams里把CSRF信息和自定义参数一起传入即可,这些参数会作为POST数据发送到后端:
//Build Tabulator var table = new Tabulator("#example-table", { height: "311px", layout: "fitColumns", ajaxURL: "user/test/ajaxtest/", // 添加CSRF Token和自定义参数 ajaxParams :{ [csrfName]: csrfHash, key1 : "value1", key2 : "value2" }, ajaxType:"POST", progressiveLoad: "scroll", paginationSize: 20, placeholder: "No Data Set", columns: [{ title: "Name", field: "name", sorter: "string", width: 200 }, { title: "Progress", field: "progress", sorter: "number", formatter: "progress" }, { title: "Gender", field: "gender", sorter: "string" }, { title: "Rating", field: "rating", formatter: "star", hozAlign: "center", width: 100 }, { title: "Favourite Color", field: "col", sorter: "string" }, { title: "Date Of Birth", field: "dob", sorter: "date", hozAlign: "center" }, { title: "Driver", field: "car", hozAlign: "center", formatter: "tickCross", sorter: "boolean" }, ], });
3. 后端验证接收
在CodeIgniter4的user/test/ajaxtest方法里,可通过$this->request->getPost()获取所有POST数据,包括CSRF Token和自定义的key1、key2:
public function ajaxtest() { $postData = $this->request->getPost(); // 处理数据并返回JSON格式结果 return $this->response->setJSON($yourProcessedData); }
这样既满足CodeIgniter4的CSRF验证要求,也能正常发送自定义POST数据。
内容的提问来源于stack exchange,提问作者UWsol
相关产品推荐
相关产品推荐

