求助:AJAX POST向PHP传递数据返回NULL的原因排查
问题分析与解决方案
嘿,我一眼就揪出问题所在啦!你的AJAX请求里多了两个不该在普通键值对数据请求里配置的参数:contentType: false和processData: false。
为什么这会导致PHP返回NULL?
这两个参数是专门为**文件上传场景(使用FormData对象)**设计的:
processData: false会阻止jQuery自动把你的对象数据序列化为PHP能识别的URL编码格式;contentType: false会让jQuery不设置请求头的Content-Type字段,PHP无法判断请求中的数据格式,自然就解析不到POST参数了。
快速修复方案
直接删掉这两行配置就行,jQuery会用默认值自动处理普通表单数据:
$.ajax({ url: '../utilities/atualizar_ferias.php', method: 'POST', cache: false, data: { data_inicio: inicio_target.val(), data_fim: fim_target.val() }, success: function(resultado){ console.log(resultado); } })
如果后续需要上传文件(保留那两个参数的场景)
要是你之后要添加文件上传功能,就得把数据包装成FormData对象,这样PHP才能正确解析:
// 构建FormData对象 const formData = new FormData(); formData.append('data_inicio', inicio_target.val()); formData.append('data_fim', fim_target.val()); // 要是有文件的话,比如 formData.append('arquivo', $('#fileInput')[0].files[0]); $.ajax({ url: '../utilities/atualizar_ferias.php', method: 'POST', cache: false, contentType: false, processData: false, data: formData, success: function(resultado){ console.log(resultado); } })
这样修改后,你的PHP代码filter_input_array(INPUT_POST, FILTER_DEFAULT)就能正常获取到传递的参数,不会再返回NULL啦!
内容的提问来源于stack exchange,提问作者Marckson
相关产品推荐
相关产品推荐

