0

JSON経由でデータをPHPスクリプトに送信し、データを返す単純なAJAX呼び出しをセットアップしようとしています。

しかし、私は運がありません。

送信するための私のコードは次のとおりです。

$.ajax({
      url: ROOT+'Address/fetchAddress',
      type: 'POST',
      async: false,
      dataType: 'json',
      data: {
        json: {
          "Id":"0",
          "Name":"Jim"
        }
      },
      error: function(a, b)
      {
        alert(b)
      },
      success: function(data)
      {
        data = $.parseJSON(data);
        alert(data)
      }
    })

サーバ側:

public function fetchAddress()
  {
    $JSON = $_POST['json'];
    echo json_decode($JSON);
  }

しかし、アラートボックスに「parseerror」が表示され、応答を調べると次のようになります。

Warning: json_decode() expects parameter 1 to be string, array given in ...public_html\controllers\Address.php on line 20
4

3 に答える 3

3

ここに概念上の誤りがあります。

dataType: 'json'返されるデータが JSON 形式であることを意味します。

あなたはまだ POST 配列でデータを送信しています

public function fetchAddress(){
    echo $_POST['json'];
}

データを取得する

反対側でピックアップするには、事前に渡されたオブジェクトがあります (データは JSON として返されるため)。

そう

success: function(data)
  {

    alert(data.id+"NAME"+data.name);
  }

(ああ、あなたのデータは文字列ではなく(投稿が期待する)、JSONはきれいな文字列にきれいになります

json: '{"Id":"0","Name":"Jim"}'
于 2013-03-14T11:52:17.213 に答える
1

呼び出しはajaxデータを配列として送信し、JSON として返されるデータを想定しているため、PHP 関数は次のようになります。

public function fetchAddress()
{
    $data = $_POST['json'];
    echo json_encode($data);
}

dataType: 'json'クライアント側は返されたデータをデコードする必要はありajaxません。

$.ajax({
      url: ROOT+'Address/fetchAddress',
      type: 'POST',
      async: false,
      dataType: 'json',
      ...
      success: function(data)
      {
        alert(data)
      }
    });
于 2013-03-14T12:04:19.680 に答える
1

PHP が受け取るデータは、既に配列であるため、デコードする必要はありません。関数をこれに変更するだけで問題ありません

public function fetchAddress()
{
  echo json_encode($_POST['json']);
}

また、応答が json であることを jQuery に伝えたので、取得したデータに対して $.parseJSON() を呼び出す必要はありません。

于 2013-03-14T11:52:16.920 に答える