关于javascript:无法使用POST请求将json数据发送到服务器

Can't sent json data to server with POST request

我尝试将JSON数据发送到服务器(使用fetch api和php作为服务器端语言)。我的服务器端代码非常简单:

1
2
3
4
5
6
7
<?php
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

    print_r($_POST);
?>

现在,当我向"Content-type":"application/x-www-form-urlencoded; charset=UTF-8"这样简单地发送请求时:

1
2
3
4
5
6
7
8
9
10
11
12
13
fetch("http://localhost:80/test.php", {
    method: 'POST',
    headers: {
     "Content-type":"application/x-www-form-urlencoded; charset=UTF-8"
    },
    body:"a=b"
})
.then(function(response){
    return response.text();
})
.then(function(text){
    console.log(text);
})

一切正常,输出为:

1
2
3
4
Array
(
    [a] => b
)

现在,当我想发送相同的东西,但使用JSON时,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
fetch("http://localhost:80/test.php", {
    method: 'POST',
    headers: {
     "Content-type":"application/x-www-form-urlencoded; charset=UTF-8"
    },
    body: JSON.stringify({"a":"b"})
})
.then(function(response){
    return response.text();
})
.then(function(text){
    console.log(text);
})

我得到了整个数组的奇怪输出作为一个键:

1
2
3
4
Array
(
    [{"a":"b"}] =>
)

现在,当我在fetch调用中将内容类型更改为:"application/json"时,输出完全丢失,得到空数组:

1
2
3
Array
(
)

你能告诉我原因是什么吗?以及如何达到预期的结果。(使用JSON发送整个数据)。


您的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
fetch("http://localhost:80/test.php", {
    method: 'POST',
    headers: {
     "Content-type":"application/x-www-form-urlencoded; charset=UTF-8"
    },
    body: JSON.stringify({"a":"b"})
})
.then(function(response){
    return response.text();
})
.then(function(text){
    console.log(text);
})

应写为:

1
2
3
4
5
6
7
8
9
10
11
12
13
fetch("http://localhost:80/test.php", {
    method: 'POST',
    headers: {
     "Content-type":"application/x-www-form-urlencoded; charset=UTF-8"
    },
    body: {"a":"b"}
})
.then(function(response){
    return response.text();
})
.then(function(text){
    console.log(text);
})

注:body: JSON.stringify({"a":"b"})改为body: {"a":"b"}


将内容类型设置为application/json

1
2
3
4
5
fetch('http://localhost:80/test.php', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({a: 'b'})
});

服务器端应该能够解码(没有没有没有没有表单的post字段的$_POST):

1
2
$array = json_decode(file_get_contents('php://input'));
echo '[cc lang="javascript"]'.print_r($array, true).'

号;

1
<P><wyn>test.php</wyn>应该与json一起发送一个内容类型的头文件:</P>[cc lang="javascript"]header('Content-type: application/json; charset=utf-8');


您的JSON应该是:JSON.stringify({a: 'Text Value', b: 1})

然后在PHP中:江户十一〔一〕号

直到您对JSON进行解码,PHP才理解它。