2017-02-13 39 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請求中發送 –

相關問題