AJAX:奇怪的"boundary"和发送的帖子"content-disposition"名称(没有jquery!



我知道如何发送post表单和处理它的服务器端与php…就像

<!-- html form -->
<form action='getform.php' method='post'>
your first name: <input name='fName'/>
your last name : <input name='lName'/>
<input type='submit'/>
</form>
//--- getform.php ---
print_r($_POST);
// prints something like:
// Array(
["fName"]=>["John"],
["lName"]=>["Doe"]
// );
echo "your full name is: {$_POST['fName']} {$_POST['lName']}";
// prints something like "your full name is: John Doe"

我只是在我的PHP服务器上开发它…实际的形式有更多的输入,后来我必须闪进一个嵌入式系统,所以要使它更有效(内存使用,响应能力等),我决定用AJAX来做…

为了简化事情,我读到你可以直接从

然后直接传递给send()方法,比如
<!-- html form -->
<form onsubmit='ajaxPost(this);return false;'>
your first name: <input name='fName'/>
your last name : <input name='lName'/>
<input type='submit'/>
</form>
<script>
function getResponse(ans){
alert('your full name is: ' + ans);
}
function ajaxPost(myForm){
var xhr = new XMLHttpRequest();
xhr.onload = function(){getResponse(this.responseText);};
xhr.open('POST', 'getform.php');
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send(new FormData(myForm));
}
</script>
//--- getform.php ---
echo $_POST['fName'].' '.$_POST['lName'];
而PHP接收到的表单数据格式很奇怪,比如
// print_r($_POST);
Array(
[------WebKitFormBoundaryDP16ROTp3RJIUWFf
Content-Disposition:_form-data;_name] => "fName"
John
------WebKitFormBoundaryDP16ROTp3RJIUWFf
Content-Disposition: form-data; name="lName"
Doe
------WebKitFormBoundaryDP16ROTp3RJIUWFf--
);

似乎php使用parse_str()函数内部转换收到的请求从querystring格式存储在$_POST数组,但由于请求似乎块,而不是它失败了,我尝试通过改变Content-Type在XHR和

但是没有什么改变

问题:只使用ajax和纯javascript,我怎么能摆脱所有这些"边界"one_answers"处置"块的东西,并发送一个正常的查询字符串格式POST,由php解析像一个正常的数组,如["fName"=>"John", "lName"=>"Doe"] ??

…我在网上搜索了一些帮助或文档,但我没有找到关于这个的任何东西:(…提前感谢

@atesin:我是来自未来的自己,带给你寻找的答案

您可以使用URLSearchParams()之前将FormData转换为urlencoded格式,这样

xhr.send(new URLSearchParams(new FormData(myForm)));

这个答案取自这里:表单数据从多部分/表单数据到表单url编码的变化?

相关内容

最新更新