2017-02-13 73 views
0

为什么如果我使用邮差,我不需要包括if ($_POST) { '' } else { $_POST = json_decode(file_get_contents('php://input'), true);}为什么RESTAPI的POST方法在POSTMAN中工作,但使用AJAX的工作方式不同?

它的工作原理与我如果从AJAX发送它不同,但为什么? 为什么不邮差requres 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 
+0

尝试以下JavaScript调用Ajax:'$。员额( “HTTP://localhost/WEP/RESTAPI/php.php API”,数据,函数(data){“friend added!”+ $ name.val()+''+ $ email.val()); },“json”);'。请注意,我的例子中的'data'没有字符串化。 –

+0

工作方式就像我没有改变任何东西 –

回答

0

你阿贾克斯已被写入发送一个JSON编码的身体POST请求。

当您使用邮递员时,您必须将其配置为使用多部分或www-url编码正文。

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

0

邮差做了一些其他的事情,然后AJAX的职位。其中一个会发布你的经典html表格,application/x-www-form-urlencoded,另一个是发布带有不同内容类型的直接json。

下划线:php $_POST变量并不包含您使用POST http请求发送的每一个消息!

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

+0

那么为什么呢,如果我在Postman中设置application/json的格式,它也不起作用,json格式只能从Ajax Post请求中发送 –

相关问题