我用PHP编写了JavaScript代码,并想使用XMLHttpRequest发送请求。但是,在设置setRequestHeader时,始终使$ _POST为null。如果删除setRequestHeader,则$ _POST存在。

这是我的JavaScript代码

var xmlhttp = new XMLHttpRequest();
var params = new FormData();
params.append('workername', name);
params.append('address', address);
params.append('email', email);
xmlhttp.open("POST", "searchworker.php", true);
//Send the proper header information along with the request
//xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        document.getElementById("workerResult").innerHTML = this.responseText;
    }
};


xmlhttp.send(params);


的代码结果

print_r($_POST);`





  数组(
      [workername] =>绿色
      [地址] =>美国
      [电子邮件] => [email protected]


我可以收到$ _POST值。但是如果取消注释线

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");


我会得到这个结果


  数组(
      [------ WebKitFormBoundaryTBeUMaDsrWBBYRFB Content-Disposition:_form-data; _name] =>“ workername”
  
  绿色
  ------ WebKitFormBoundaryTBeUMaDsrWBBYRFB内容处置:表格数据;名称=“地址”
  
  我们
  ------ WebKitFormBoundaryTBeUMaDsrWBBYRFB内容处置:表格数据; name =“电子邮件”
  
  [email protected]
  ------ WebKitFormBoundaryTBeUMaDsrWBBYRFB--
  
  )


并且所有$ _POST值都为null。

那么我应该使用setRequestHeader吗?因为我在网上读到,如果我们使用open(“ POST”,...),我们应该使用setRequestHeader。如果设置了setRequestHeader,是什么原因导致无法接收到$ _POST?

最佳答案

一个FormData对象在发布时会被格式化为multipart/form-data主体,而不是经过urlencode的主体。如果您想将数据发布为application/x-www-form-urlencoded,则需要自己将发布正文格式化为urlencoded字符串。

var params = 'workername=' + encodeURIComponent(name) + '&address=' + encodeURIComponent(address) + '&email=' + encodeURIComponent(email);

关于javascript - XMLHttpRequest,设置了setRequestHeader时,$ _ POST为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48179656/

10-13 02:00