2017-02-13 4 views
0

なぜそれが私がポストマンを使用していた場合、私はそれは私がAJAXからそれを送信することであったかのように動作が異なりますが、なぜif ($_POST) { '' } else { $_POST = json_decode(file_get_contents('php://input'), true);}RESTAPIのPOSTメソッドはPOSTMANで動作しますが、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"、データを、 + $ name.val()+ '' + $ email.val()); }、 "json"); '。私の例の 'data'は文字列化されていないことに注意してください。 –

+0

私は何も変更しなかった場合と同じように動作します –

答えて

0

ないあなたのAjaxは、JSONエンコードされたボディとPOSTリクエストを送信するために書かれています。

郵便番号を使用する場合は、マルチパートまたはwww-urlでエンコードされた本文を使用するように設定する必要があります。

PHPは、これらのフォーマットを使用してリクエストボディを自動的にデコードします。

0

郵便配達員は何か他にAJAXの投稿をします。 1つはapplication/x-www-form-urlencodedであなたの古典的なhtmlフォームを投稿し、もう1つは別のcontenttypeで直接jsonを投稿しています。

ボトムライン:PHPの$_POST変数には、POST HTTPリクエストで送信するすべての変数が含まれていません。

もここを参照してください、これは優れた説明です: `$の.post(:PHP "php://input" vs $_POST

+0

なぜそれが次に、Postmanのアプリケーション/ jsonのフォーマットを設定した場合、それはjsonフォーマットもAjax Postリクエストからのみ送信できます –

関連する問題