为什么RESTAPI的POST方法在POSTMAN中有效,但使用AJAX的方式有所不同?

时间:2017-02-13 15:19:52

标签: php ajax rest api postman

为什么如果我使用Postman,我不需要包含if ($_POST) { '' } else { $_POST = json_decode(file_get_contents('php://input'), true);}

它的工作方式不同,如果我是从AJAX发送它,但为什么? 为什么Postman不要求json_decode(file_get_contents('php://input'), true);

Ajax代码

$.ajax({
    url: "http://localhost/WEP/RESTAPI/php.php?api",
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    success: function(data) {
      window.alert("Friend added! "+$name.val()+' '+$email.val());
    },
    error: function() { 
        alert("Error");
    } 
});

PHP

elseif ($srequest == 'POST'){

                    if ($_POST) {
                       '';
                    } else {
                        $_POST = json_decode(file_get_contents('php://input'), true);
                    }

                        $id = $_POST['id'];
                        $name = $_POST['name'];
                        $email = $_POST['email'];

                        //...mysqli connect,query

2 个答案:

答案 0 :(得分:0)

您的Ajax已编写为发送带有JSON编码正文的POST请求。

使用Postman时,必须将其配置为使用multipart或www-url编码的正文。

PHP将使用这些格式自动解码请求主体。

答案 1 :(得分:0)

Postman做了一些其他事情,然后是一个AJAX帖子。一个用application/x-www-form-urlencoded发布你的经典html表单,另一个用不同的内容类型发布直接的json。

bottomline:php $_POST变量不包含你发送的每个POST http请求!

另见这里,这是一个很好的解释:PHP "php://input" vs $_POST