2

data [0] .idを使用してidを返すことができないのはなぜですか?

    $(document).ready(function(){   
$.ajax({
  type: 'POST',     
  dataType: "json",
  url: '<?php echo matry::base_to('tests/map_it');?>',
  success: function (data) 
  {
     alert(data[0])
    $('#alerts').html(data);
    data[0].id

  }

  });
});

これが戻ってくるアラートです。

    {"id":19385,"first":"RLY","last":"MAZI",
    "trainer_address1":"19 NE 13H CRT",
    "trainer_address2":null,"CITY":"MII","STATE":"AL",
    "trainer_zip":"33333","trainer_phone":"(721)222-4444","trainer_fax":null,
    "trainer_cell":"(213)213-  2133","website_trainer_id":115,"trainer_email":"MO@gmail.COM",
"trainer_group":"","inactive":null}

どんな助けでも大歓迎です。

編集これはそのjsonを返すphpです:

$mapit = sql::results("Select * from event.ACS.trainer where inactive is null or inactive=0");
foreach ($mapit as $row)
{
    $return[] = json_encode($row, JSON_FORCE_OBJECT);
}
echo json_encode($return);

各行をループしてエンコードする必要があります。そうしないと、ajax関数は返されたjsonがあるとは見なさないためです(データ変数は空です)。

4

4 に答える 4

6

あなたの本当の問題はあなたのPHPにあります:

$mapit = sql::results("Select * from event.ACS.trainer where inactive is null or inactive=0");
foreach ($mapit as $row)
{
    $return[] = json_encode($row, JSON_FORCE_OBJECT);
}
echo json_encode($return);

データの json_encoding を二重にしているため、Javascript に返されたときに内部の JSON が JSON 形式の文字列として扱われます。

次のようにする必要があります。

$mapit = sql::results("Select * from event.ACS.trainer where inactive is null or inactive=0");
foreach ($mapit as $row)
{
    $return[] = $row;
}
echo json_encode($return);

最も内側の json_encode を削除したことに注意してください。

これで、Javascript で .parseJSON() 呼び出しを使用する必要がなくなりました。この解決策は、実際の問題に対処していない承認済みの解決策よりもはるかに効率的です。

より効率的になりますので、

  1. PHP でエンコードする必要のないデータを二重にエンコードすることはありません。
  2. Javascript でエンコードする必要のないデータをデコードしていません。

したがって、2 つの不要な操作と多くの無駄なサイクルを排除します (これらの操作はループ内に含まれているため)。

于 2013-01-29T19:25:33.533 に答える
2

data[0]JSON のように見えるので、オブジェクトとして使用する前に解析する必要があります。例えば$.parseJSON(data[0]).id

于 2013-01-29T19:11:55.690 に答える
1

配列ではなく単一のオブジェクトが返されているように見えるため、data.idを使用して id プロパティにアクセスできるはずです。配列インデックスを指定する必要はありません。

于 2013-01-29T19:13:31.250 に答える
1

応答ヘッダーに「Content-Type: application/json」を追加してみてください。このヘッダーを追加すると、Google Chrome、Opera、Safari、および IE は、文字列を自動的に JSON オブジェクトに変換します。

このヘッダーを追加する場合、parseJSON は Firefox でのみ必要になります。

そのヘッダーを追加したくない場合は、「JSONObject = jQuery.parseJSON(response);」文字列を JSON オブジェクトに変換するには、JavaScript で が必要です。

于 2013-01-29T19:13:33.947 に答える