我在使用Fetch将数据发布到API时遇到问题。我将其简化为:
我在https://sophivorus.com/post.php上创建了一个简单的PHP文件,代码如下:
<?php
echo json_encode( $_POST );
如果我浏览到它,打开开发控制台,并运行以下简单命令:
fetch( 'https://sophivorus.com/post.php', {
method: 'POST',
} ).then( response => response.json() ).then( console.log );
我得到一个有效的空JSON响应。但是,如果我添加一个payload:
fetch( 'https://sophivorus.com/post.php', {
method: 'POST',
body: JSON.stringify( {
foo: 'bar'
} ),
} ).then( response => response.json() ).then( console.log );
我希望得到一个JSON响应与张贴的值。但我得到的是同样空洞的回答。由于某种原因,我的POST数据没有被发布。
我肯定这一定是很愚蠢的事情,但我就是看不出来。任何帮助将是最受欢迎的,谢谢!!
3条答案
按热度按时间vaj7vani1#
使用
FormData
而不是JSON.stringify
可以工作。我不是很精通PHP,但我的理论是PHP不会自动解析JSON数据(当使用JSON.stringify
时)。在回显json_encode
之前,需要先使用json_decode
。另一方面,FormData
会自动解析为$_POST
数组。qco9c6ql2#
尝试在fetch header选项中添加
'Content-Type': 'application/json'
。它帮助服务器解释您发送的数据。参考号:Is Content-Type mandatory in HTTP post request?
vwhgwdsa3#
问题与提取无关。一个简单的客户端请求显示了同样的问题:
回复:[]
$_POST数组用于请求体的urlencoded参数,而不是json。
试试看: