【问题标题】:PHP handle $_POST from XMLHttpRequest2 with new FormData() and append()PHP 使用 new FormData() 和 append() 处理来自 XMLHttpRequest2 的 $_POST
【发布时间】:2016-01-13 02:01:51
【问题描述】:

使用 PHP 如何像传统表单数据一样处理通过XMLHttpRequest2new FormData()append() 发送的数据?

在我的 AJAX 参数处理函数中,参数如下所示:

q1=v1&q2=v2&q3=v3

您可以使用print_r($_POST); 并确定访问$_POST['q1'] 以轻松获取v1 的值。


当我有 PHP 并使用 print_r($_POST); 在服务器上测试 XMLHttpRequest2new 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 不这样做。

标签: php ajax xmlhttprequest-level2


【解决方案1】:

如果 id 是表单元素,您可以使用 new FormData(id) 创建 FormData。无需遍历表单的所有元素,因为 FormData 可以自己完成。

【讨论】:

  • Firefox 38 ESR 显然会自动确定正确的 mime(application/x-www-form-urlencoded multipart/form-data),但我需要进行测试。访问我的个人资料/网站,查看您的贡献并感谢您!
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2022-12-19
相关资源
最近更新 更多