使用JS Fetch+FormData时PHP接收端的数据获取方案咨询
PHP如何接收FormData格式的POST请求数据?
前端代码示例
事件处理函数
eventReceive: function(info) { // 提取需要发送的数据到一个简单对象 var eventData = { title: info.event.title, start: info.event.start, }; // 通过AJAX POST请求发送数据,并打印服务器返回的响应 fetch('<?php \E::get('obj_curr_module')->build_action_path('dev_guideline_ui_calendar','add_event'); ?>', { method: 'POST', headers: { 'Accept': 'application/json' }, body: encodeFormData(eventData) }) .then(response => console.log(response)) .catch(error => console.log(error)); },
FormData转换函数
const encodeFormData = (data) => { var form_data = new FormData(); for (var key in data) { form_data.append(key, data[key]); } return form_data; };
问题描述
我的eventData为JS对象格式,经过encodeFormData函数转换为FormData后,想了解PHP接收端应如何编写才能获取请求体中传递的eventData数据?
PHP接收端实现
由于你通过FormData发送数据,请求的Content-Type会自动设置为multipart/form-data,PHP可以直接通过超全局变量$_POST读取这些字段:
基础接收代码
// 对应dev_guideline_ui_calendar模块的add_event动作处理方法 public function action_add_event() { // 安全获取POST字段,避免未定义索引报错 $title = $_POST['title'] ?? ''; $start = $_POST['start'] ?? ''; // 这里可以执行数据验证、写入数据库等业务逻辑 // 示例:返回接收的数据给前端 echo json_encode([ 'received_title' => $title, 'received_start' => $start ]); exit; }
额外注意点
- 如果
start字段是FullCalendar的日期对象,FormData会将其序列化为ISO格式字符串(如"2024-05-20T14:30:00"),PHP端可以用DateTime类转换为需要的格式:if (!empty($start)) { $start_datetime = new DateTime($start); $formatted_start = $start_datetime->format('Y-m-d H:i:s'); // 转换为常用的时间格式 } - 若你使用的PHP框架提供了请求封装(比如自定义的请求对象),也可以用框架自带的方法获取参数,例如:
$title = $this->request->getPost('title');
内容的提问来源于stack exchange,提问作者Kinesis
相关产品推荐
相关产品推荐

