6

POSTを使用してAJAX経由でデータをphpファイルに送信します。文字列を送信するだけで問題なく動作しましたが、JS オブジェクトを JSON で送信し、PHP 側でデコードしたいと考えました。

コンソールでは、データが正しく送信されていることがわかりますが、PHP 側では json_decode が NULL を返します。

私は次のことを試しました:

this.getAbsence = function()
{
    alert(JSON.stringify(this));
    jQuery.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajax/selectSingle.php?m=getAbsence",
        data: JSON.stringify(this),
        success : function(data){
            alert(data);
        }
    });
}

PHP:

echo $_POST['data'];
echo json_decode($_POST['data']);
echo var_dump(json_decode($_POST['data']));

と:

this.getAbsence = function()
{
    alert(JSON.stringify(this));
    jQuery.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajax/selectSingle.php?m=getAbsence",
        data: {'Absence' : JSON.stringify(this)},
        success : function(data){
            alert(data);
        }
    });
}

PHP:

echo $_POST['Absence'];
echo json_decode($_POST['Absence']);
echo var_dump(json_decode($_POST['Absence']));

アラートは、すべてが問題ないことを確認するためのものでした...

はい、通常の文字列は正しくエコーされました:-)

4

5 に答える 5

23

最初のコードでコードが間違っていたのは、これを使用したに違いないということです。

var_dump(json_decode(file_get_contents("php://input"))); //and not $_POST['data']

PHPマニュアルより引用

php://input は、リクエスト本文から生データを読み取ることができる読み取り専用ストリームです。

あなたの場合、本文で JSON を送信しているので、このストリームから読み取る必要があります。$_POST['field_name']投稿本文が URL エンコードされた形式ではないため、通常の方法では機能しません。

2 番目の部分では、これを使用したに違いありません。

contentType: "application/json; charset=utf-8",
url: "ajax/selectSingle.php?m=getAbsence",
data: JSON.stringify({'Absence' : JSON.stringify(this)}),

更新

リクエストに content type がある場合application/json、PHP はリクエストを解析せず、JSON オブジェクトを に返します$_POST。生の HTTP 本文から自分で解析する必要があります。JSON 文字列は を使用して取得されますfile_get_contents("php://input");

を使用してそれを取得する必要がある場合$_POSTは、次のようにします。

data: {"data":JSON.stringify({'Absence' : JSON.stringify(this)})},

次に、PHP で次のようにします。

$json = json_decode($_POST['data']);
于 2012-06-08T10:56:21.357 に答える
0

これを試して

  var vThis = this;
  this.getAbsence = function()
  {
    alert(JSON.stringify(vThis));
    jQuery.ajax({
       type: "POST",
       contentType: "application/json; charset=utf-8",
       url: "ajax/selectSingle.php?m=getAbsence",
       data: JSON.stringify(vThis),
       success : function(data){
         alert(data);
       } 
     });
   }

編集

これもできると思います!

  var vThis = this;
  this.getAbsence = function()
  {
    alert(JSON.stringify(vThis));
    jQuery.ajax({
       type: "POST",
       dataType: "json",
       url: "ajax/selectSingle.php?m=getAbsence",
       data: vThis,
       success : function(data){
         alert(data);
       } 
     });
   }

そしてPHPで

print_r($_POST);
于 2012-06-08T11:16:07.227 に答える
0

一重引用符は php には無効ですjson_encode。フィールド名と値の両方に二重引用符を使用してください。

于 2012-06-08T10:58:02.407 に答える
0

私には、AJAX オブジェクトを再フォーマットする必要があるように見えます。url-property は、ターゲットの php ファイルの URL のみである必要があり、投稿する必要があるデータは、data-property のクエリ文字列の形式である必要があります。以下は期待どおりに機能するはずです。

this.getAbsence = function() {
  var strJSONData = JSON.stringify(this);
  alert(strJSONData);
  jQuery.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    url: 'ajax/selectSingle.php',
    data: 'm=getAbsence&Absence=' + strJSONData,
    success: function(data) {
      alert(data);
    }
  });
}
于 2012-06-08T11:11:41.720 に答える