PHP 使用 new FormData() 和 append() 处理来自 XMLHttpRequest2 的 $_POST
Posted
技术标签:
【中文标题】PHP 使用 new FormData() 和 append() 处理来自 XMLHttpRequest2 的 $_POST【英文标题】:PHP handle $_POST from XMLHttpRequest2 with new FormData() and append() 【发布时间】:2016-01-13 02:01:51 【问题描述】:使用 php 如何像传统表单数据一样处理通过XMLHttpRequest2
和new FormData()
和append()
发送的数据?
在我的 AJAX 参数处理函数中,参数如下所示:
q1=v1&q2=v2&q3=v3
您可以使用print_r($_POST);
并确定访问$_POST['q1']
以轻松获取v1
的值。
当我有 PHP 并使用 print_r($_POST);
在服务器上测试 XMLHttpRequest2
和 new FormData()
和 append()
时,我得到以下信息:
-----------------------------3875113001076
Content-Disposition: form-data; name="q1"
v1
-----------------------------3875113001076
Content-Disposition: form-data; name="q2"
v2
-----------------------------3875113001076
Content-Disposition: form-data; name="q3"
v3
但是我无法再访问$_POST['q1'];
。
JavaScript AJAX 参数函数
function ajax_parameters(id)
var f;
var fd = new FormData();
if (id_(id) || typeof id=='object' && id.nodeName.toLowerCase()=='form')
if (id_(id)) f = id_(id);
else f = id;
for (var i = 0;i<f.elements.length;i++)
if (f.elements[i].type!='file')
fd.append(f.elements[i].name,f.elements[i].value);
else
for (var j = 0; j < f.elements[i].files.length; ++j)
fd.append(f.elements[i].name+'['+j+']', f.elements[i].files[j],f.elements[i].files.item(j).name);
return fd;
【问题讨论】:
奇怪,我刚刚用print_r ($_POST)
测试了AJAX,并且可以很好地检索结果。也许发布您正在使用的完整代码?
@GGG 更新,添加encodeURIComponent()
似乎没有任何好处。
如果id
是表单元素,您可以使用new FormData(id)
创建FormData。无需遍历表单的所有元素,因为 FormData 可以自己完成。
@GGG 好的,正在努力……
另外,您需要遍历文件,因为 FormData 不这样做。
【参考方案1】:
如果 id 是表单元素,您可以使用 new FormData(id)
创建 FormData。无需遍历表单的所有元素,因为 FormData 可以自己完成。
【讨论】:
Firefox 38 ESR 显然会自动确定正确的 mime(application/x-www-form-urlencoded
或 multipart/form-data
),但我需要进行测试。访问我的个人资料/网站,查看您的贡献并感谢您!以上是关于PHP 使用 new FormData() 和 append() 处理来自 XMLHttpRequest2 的 $_POST的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Php 和 jquery ajax 在 mysql 中插入 FormData