2017-03-27 36 views
0

$ _POSTの値をjQuery AJAX関数の警告ボックスに出力しようとしていますが、PHPコントローラの$ _POST値は常に空です。応答の空の配列

私は(私はこの問題の可能な解決策の複数のバリエーションを試してみましたが、それでも私はこの問題を解決するための正しい方法を見つけることができません)、jQueryのバージョン2.2.3

をPHPのバージョン5.5を使用しています。

1.これは私のAJAXコード(私はそれが機能を提出して行われていなかった、私はちょうどリダイレクトなしで私のWebページ上の一部のコンテンツを更新しています)です:

あり
$.ajax({ 
       method: 'POST', 
       url: '../OrganizationController.php', 
       dataType: "json", 
       contentType: "application/json", 
       data: {'myForm':$('#myForm').serialize()}, 
       success: function(data){ 
        alert(data); 
       }, 
       error: function(xhr, desc, err){ 
        console.log(err); 
       } 
      }); 

2.

<?php 

include('../mysql_conn.php'); 

$value; 
if ($_POST['myForm']) { 
    $value= $_POST['myForm']; 
    header('HTTP/1.1 200 OK'); 
} else { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 

header('Content-Type: application/json'); 
echo json_encode($value); 
... 
?> 

3.私の簡単なフォーム::

私の簡単なPHPコントローラです
<form id="myForm"> 
    <input type="text" name="name" title="Name"/> 
    <input type="button" name="click">Press</input> 
</form> 

コントローラが動作しています。入力またはテストテキストで応答を出力したい場合は、すべてが機能していて、成功アラートボックスにテキストが表示されます。

私はさまざまな方法で試してみましたが、似たような問題についてはほとんどすべての回答を見ました。

私は、削除のdataTypeしようとしたテキストにそれを変更しようとした、「{のような単純な値でそれをテストし、のcontentTypeを削除しようとした人々がお勧め多くの答えのようにデータにオブジェクトを追加name ':John}など、 は、1つの入力とテキストフィールドで非常に単純なフォームを作成しようとしました。何も助けなかった。

質問:

あなたがこの問題か私のコードを持つか、私の問題のための可能な解決策と他の同様のコードを使用していくつかの小さな例えば助言することはできますか?

編集:

我々は非常に有益discussionを持っているが、残念ながら、このソリューションのどれも助けません。しかし、他のブラウザーや計算では、すべてがうまくいっていることが分かりました。

+0

あなたは 'contentType:" application/json "、' –

+0

を削除することができます。私はすでにこれを試してもう一度削除します。 –

+0

'メソッド: 'POST'、' ---> 'タイプ: 'post'' –

答えて

0

私はついに解決策を見つけました!

私はこの問題を解決しようとしていました。 PHPStorm IDE v.2016.1を独自のビルドインサーバーで使用していました。

私はXAMPPを自分のApacheサーバーに切り替えたときに問題は解決しました。すべてが違うバリアントでうまく動作しているので、問題は自分のコードではありませんでした。 私はthis is the real bug in PHPStorm

は、この問題を解決するためにことがわかった: はちょうど別のサーバに切り替えてPHPStormのP.S.を使用していませんPHPStorm IDEで複数のサーバを変更した場合でも問題は解決されませんでしたので、注意してください。

1

問題は、フォームエンコードされたデータをJSONオブジェクト内に配置しているためです。冗長であることを除けば、これはあなたのPHPコードを混乱させるでしょう。

問題を解決するには、シリアル化されたフォームを送信し、$_POSTを使用して、送信されたフィールドを通常通り取得します。あなたのPHPファイルで

$.ajax({ 
    method: 'POST', 
    url: '../OrganizationController.php', 
    dataType: "json", 
    data: $('#myForm').serialize(), 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(xhr, desc, err){ 
     console.log(err); 
    } 
}); 
if ($_POST['input-field-name-here']) { 
    // do something with the data here... 

    header('HTTP/1.1 200 OK'); 
} else { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 
+0

あなたの答えはRory McCrossanありがとうございますが、私はすでにこの亜種を試してみました。私は空のPOSTとヘッダーエラー500を取得しています。 –

3

、あなただけの彼らの名前で入力パラメータを取得することができます。あなたのフォームのように、電子メールや電話番号を持っていて、それをコントローラファイルに送信している場合は、フォーム名の代わりにコントローラファイルの名前で取得します。

<?php 
if ($_POST['name']) { 
    $value= $_POST['name']; 
} else { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 

header('Content-Type: application/json'); 
echo json_encode($value); 
?> 

のような値がここで私は電子メールがあなたのフォームフィールドであることを前提としています、

$.ajax({ 
    method: 'POST', 
    url: 'test.php', 
    dataType: "json", 
    data: $('#myForm').serialize(), 
    success: function(data) { 
     alert(data); 
    }, 
    error: function(xhr, desc, err) { 
     console.log(err); 
    } 
}); 

そして、あなたのPHPファイル内:ここ

はこれを行うには正しいコードです。

試してみてください!

編集:フォームのフィールドの1つが「名前」であることがわかったので、PHPファイルのPOSTパラメータを置き換えました。乾杯!

P.S:contentType:application/jsonが時々動作しません。ここにいくつかのスレッドを見ることができます:Github Thread

+0

あなたの答えをありがとう。私はあなたのすべての変種を試しましたが、POSTはまだ空で、私は500のエラーが発生しています。 Masivuye Cokileとの長い議論があり、ブラウザではすべてうまくいきましたが、私の中にはこのエラーがあります...奇妙な... –

+0

@AlexeyShabramov Skypeや他のIMで私にそれを見せることはできますか? –

+0

あなたの回答をありがとうが、私はすでに解決策を見つけました...そしてそれはIDEの深刻なバグでした。別のIDEとサーバーに切り替えると、すべてが正常に動作するようになりました。 –

関連する問題