jQuery ajax()返回json对象但没有正确提醒

Tim*_*ski 1 php ajax jquery json

为什么我不能使用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

  }

  });
});
Run Code Online (Sandbox Code Playgroud)

这是回归的警报.

    {"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}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

编辑这是返回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);
Run Code Online (Sandbox Code Playgroud)

我必须遍历并编码每一行,否则,ajax函数不会认为返回了json(并且我的数据var为空)

cru*_*ush 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);
Run Code Online (Sandbox Code Playgroud)

您对数据进行了两次json_encoding,这导致内部JSON在返回到Javascript时被视为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);
Run Code Online (Sandbox Code Playgroud)

注意我已经删除了最里面的json_encode.

现在,您不需要在Javascript中使用.parseJSON()调用.该解决方案将比公认的解决方案更有效,后者没有解决实际问题.

它会更有效率,因为

  1. 您不是对不需要在PHP中编码的数据进行双重编码.
  2. 您没有解码不需要在Javascript中编码的数据.

因此,您消除了2个不必要的操作,以及许多浪费的循环(因为这些操作包含在循环中).