2017-06-20 9 views
-1

js jQueryスクリプトは、フォームデータをオブジェクトに適切にフォーマットしてPHPコードに送信しています。jQuery ajax ApacheへのPOSTリクエストPHPサーバーがデータを受信しない

$("#formSignup").submit(function(e){ 
    // Map the array into a properly formatted object 
    var data = {}; 
    $.map($(this).serializeArray(),function(n, i){ 
     data[n.name] = n.value; 
    }); 
    // Send the http request 
    $.ajax({ 
     type: "POST", 
     url: "api/signup.php", 
     data: JSON.stringify(data), 
     contentType: "application/json", 
     success: function(response){ 
      //console.log(JSON.parse(response)); 
      console.log(response); 
     }, 
     failure: function(err){ 
      console.error(err); 
     } 
    }); 
    e.preventDefault(); // Don't submit defaultly 
}); 

ただし、PHPはデータを受信できません。 print_r($_POST)は空の配列を出力し、値にはアクセスできません。間違ったファイルからの応答も得られません。

これは、mozilla開発コンソールによって記録されたXmlHttpRequestがJSONデータを明確に投稿していることを考えると、かなり奇妙です。

XHR

enter image description here

その他の質問は、サーバーによって行われたリダイレクトを示すことによって回答されています。しかし、私はこれらの設定で全く何もしていないし、自分の機能を持って同じサーバ上で仕事をしている間に、後でリクエストを受け取った。

+2

PHPコードのサンプルがありますか? – Nick

+0

@ニックそれについて特別なことは何もありません。 $ _POST変数は単に空です。 –

+0

PHPはJSONを '$ _POST'にデコードできません。実際にJSONとしてデータを送信したい場合は、 'json_decode(file_get_contents(" php:// input "))' – Barmar

答えて

2

ajaxオブジェクトのcontentTypeプロパティを削除します。

データをシリアル化するには、$(this).serialize()を使用してください。

$("#formSignup").submit(function(e){ 

    var data = $(this).serialize(); 

    // Send the http request 
    $.ajax({ 
     type: "POST", 
     url: "api/signup.php", 
     data: data, 
     success: function(response){ 
      console.log(response); 
     }, 
     failure: function(err){ 
      console.error(err); 
     } 
    }); 
    e.preventDefault(); // Don't submit defaultly 
}); 

その後、$_POST変数にデータが正常に表示されるはずです。

+0

それは私が避けたいものです –

+0

@JohanSundmanもしあなたがPHPであなたのデータサーバー側を読む必要があれば、それは行く方法です。サーバー側で 'json_encode()'を実行できます。 – loelsonk

+0

'type:" post "'を使うと、データはクエリ文字列に入れられず、POSTデータに入れられます。 – Barmar

関連する問題