AJAX POST数据无法在PHP中接收,报Undefined array key错误求助
问题排查:AJAX发送数据后PHP提示Undefined array key "td"
我刚从基础开始学习PHP,实践中遇到问题且查阅资料后仍未解决。我的页面里,用户在表单输入数据后通过Add按钮添加到表格,点击Save按钮时,通过AJAX将表格数据和表单内3个未加入表格的文本框数据发送到PHP。
Save按钮的JS代码
$("#save").on("click", function (e) { e.preventDefault(); debugger if (!iQuantity || !iDiscount) { // This is checking validation. $("#message").fadeIn(1000).html(`<div class="alert alert-warning">Please fill all the fields</div>`); $("#message").fadeOut(3000); } if ($("#amountPayable").val() === "" || $("#amountPayable").val() == 0 || $("#amountPaid").val() === "" || $("#amountPaid").val() == 0 || $("#discountGiven").val() === "" ) { $("#message").fadeIn(1000).html(`<div class="alert alert-warning">Please fill all the fields</div>`); $("#message").fadeOut(3000); } else { var tableData = []; $('#addTable tbody tr').each(function () { debugger var rowData = { itemId: $(this).find('td:eq(0)').text(), // first column in row is trainee (on index 0) saleId: $(this).find('td:eq(1)').text(), // second column in row is title qty: $(this).find('td:eq(3)').text(), // 4th column in row is attend amount: $(this).find('td:eq(4)').text(), // 5th column in row is trainer }; tableData.push(rowData); }); var formFields = { // This takes text fields data amountPayable: $("#amountPayable").val(), amountPaid: $("#amountPaid").val(), discountGiven: $("#discountGiven").val(), }; // Here I'm making object of both above objects. var dataToSend = { td: JSON.stringify(tableData), // Grid data ff: JSON.stringify(formFields), // Text fields data }; console.log("ok"); $("#message").html(""); debugger $.ajax({ url: "../add-pages/add-orders.php", type: "POST", data: dataToSend, processData: false, contentType: false, success: function (receivedData) { debugger var dt = receivedData; $('#message').fadeIn(1000).html(receivedData); $("#message").fadeOut(3000); // --------------------------------------------- For Claring the Form Fields, --------------------------------------------- $(':input', '#addOrdersData') .not(':button, :submit, :reset, :hidden') .val('') .prop('checked', false) .prop('selected', false); $("#update").attr("disabled", true); } }); } });
PHP接收代码
<?php date_default_timezone_set('Asia/Karachi'); $tableData = json_decode($_POST['td']); // Grid data $ff = json_decode($_POST['ff']); // Grid data ?>
报错信息
运行后PHP报错:Warning: Undefined array key "td" in C:\xampp\htdocs\superStore\add-pages\add-orders.php on line 4
错误原因及解决方案
核心问题
你在AJAX请求里设置了processData: false和contentType: false,这两个参数是专门用于文件上传场景的,会让jQuery跳过对发送数据的格式化处理,也不会设置默认的Content-Type请求头。但你当前发送的是普通键值对数据,这会导致PHP无法识别数据格式,自然就找不到$_POST['td']这个键。
方案一:移除多余参数(推荐)
直接删除AJAX配置里的processData: false和contentType: false,jQuery会自动把dataToSend格式化为标准的表单提交格式(application/x-www-form-urlencoded),PHP就能正常通过$_POST获取数据。
修改后的AJAX代码片段:
$.ajax({ url: "../add-pages/add-orders.php", type: "POST", data: dataToSend, success: function (receivedData) { debugger var dt = receivedData; $('#message').fadeIn(1000).html(receivedData); $("#message").fadeOut(3000); $(':input', '#addOrdersData') .not(':button, :submit, :reset, :hidden') .val('') .prop('checked', false) .prop('selected', false); $("#update").attr("disabled", true); } });
方案二:以纯JSON格式发送数据(可选)
如果想用JSON格式传递数据,需要同步调整JS和PHP代码:
- JS端:将数据转为JSON字符串,设置正确的Content-Type
$.ajax({ url: "../add-pages/add-orders.php", type: "POST", data: JSON.stringify(dataToSend), contentType: "application/json", success: function (receivedData) { // 原有成功回调代码 } }); - PHP端:读取原始请求数据再解码
<?php date_default_timezone_set('Asia/Karachi'); $rawData = file_get_contents("php://input"); $data = json_decode($rawData, true); $tableData = json_decode($data['td']); $ff = json_decode($data['ff']); ?>
内容的提问来源于stack exchange,提问作者user87
相关产品推荐
相关产品推荐

