2016-06-13 15 views
2

Ajaxを使用してPHPにPOSTリクエストを送信しようとしています。PHPでAjax POSTメソッドが機能していませんが、GETが機能しています

私はGETを使ってもうまく動作しますが、POSTで私が受け取ったデータは空です。 私はjsonとしてデータを送信しています。

これは、jsのコードは次のようになります。これは、PHP/GiveItBack.phpこのコードで

<?php 

$x = $_GET['word']; 
echo 'Get: ' . $x; 

$x = $_POST['word']; 
echo '; Post: ' . $x; 

$x = $_REQUEST['word']; 
echo '; Request: ' . $x . ';'; 

?> 

ファイルである

$.ajax(
     { 
      type: 'POST', 
      url: 'php/GiveItBack.php', 
      contentType: "json", 
      data: { 
       word: 'abc' 
      }, 
      success: function (json) { 
       alert(json); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
     }); 

、警告ウィンドウ内のメッセージは次のようになります。

取得:役職: ;リクエスト:;

私はタイプを交換する場合:「POST」のjsファイル内をタイプで:これは私が警告ウィンドウで取得結果である GET「」(私が見て期待していたとして):

Get:abc;役職: ;リクエスト:abc;

私はここで何が欠けているのか分かりません。 コードに何か間違っているか、これが機能するために必要な特別な設定です。 jqueryの-2.2.4.minとPHP V5.6とXAMPPのv3.2.2:私は使用していますところで

ありがとうございます。

+0

はあなたが点検したあなたのphpinfo? POSTは有効になっていますか? –

+0

この行**; enable_post_data_reading =オフ**コメント付きで、既定ではオンです。だから私はそれが活性化されたと思います。 – Horatiu

+0

エコーの代わりにプリントを試してみてください。理由は分かっていませんが、過去にエコーを使用していた問題がありました。 –

答えて

4

、使用する必要がcontentType: "application/x-www-form-urlencoded" OR 'Content-Type': 'application/json'

$.ajax(
    { 
     type: 'POST', 
     url: 'php/GiveItBack.php', 
     contentType: "application/x-www-form-urlencoded", 
     data: { 
      word: 'abc' 
     }, 
     success: function (json) { 
      alert(json); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
    }); 
+0

なぜですか? POSTのために削除する必要がある理由を説明できますか? – Styphon

+0

ありがとうございます。これはうまくいった。しかし、** contentTypeを使った場合の問題は何ですか? "json" **? – Horatiu

+1

@Horatiu 'json'は有効なコンテンツタイプではありません。これはフォームの 'enctype'に似ています。私はダーラがあなたに実際に説明を与えることを望んでいました。私はあなたが後にしているのは 'dataType'で、戻りデータのフォーマットを指定していると思います。 – Styphon

0
コンテンツタイプが正しくありませんでした
$.ajax(
    { 
     method: 'POST', 
     url: 'php/GiveItBack.php', 
     data: { 
      word: 'abc' 
     }, 
     success: function (json) { 
      alert(json); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
    }); 
+2

タイプはエイリアスです...なぜこのように動作するのですか?説明してください。 –

+0

メソッドをタイプ交換しようとしましたが動作していません。メソッドと型の両方を使用しようとしましたが、まだ動作していません。 – Horatiu

1

contentType: "json",

あなたコンテンツタイプは、ここで間違っています。あなたが試している方法でそれを受信したい場合は、application/x-www-form-urlencodedを使用する必要があります。

それでもJSON内固執したい場合は、あなたのPHPの入力をjson_decodeする必要があります:

$json = file_get_contents('php://input'); 
$obj = json_decode($json, TRUE); 
0

contentType: jsonを削除し、あなたは$_POST superblogal配列を使用することができるはずです。 contentType: jsonを使用すると、パラメータを含むオブジェクトが文字列に変換され、サーバーに送信されます。

  • アプリケーション/ x-www-form-urlencodedで
  • :文字列を取得するにはあなただけの次のヘッダーと一緒に送信されたデータが含まれている$_POSTので、これが起こる

    file_get_contents('php://input');

    を使用する必要がありますマルチパート/フォームデータエンコード

contentType: jsonを設定すると、jQueryはそのJSON文字列が生の入力として扱われ、したがって、あなたはそれが

0

contentType: json削除取得するためにphp://inputストリームを使用する必要が$_POSTによってサポートされていない要求にヘッダー:

$.ajax(
     { 
      type: 'POST', 
      url: 'php/GiveItBack.php', 

     data: { 
      word: 'abc' 
     }, 
     success: function (json) { 
      alert(json); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
    }); 
+0

この[URL](http://stackoverflow.com/help)をチェックしてください。コンテンツの品質を上げることが有効です –

関連する問題