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

时间:2013-01-29 19:04:21

标签: php jquery ajax json

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

非常感谢任何帮助。

EDIT 这是返回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(并且我的数据var为空)

4 个答案:

答案 0 :(得分: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,这导致内部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);

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

现在,您不需要在Javascript中使用.parseJSON()调用。该解决方案将比已接受的解决方案更有效,后者无法解决实际问题。

因为

会更有效率
  1. 您不是对不需要编码的数据进行双重编码 PHP。
  2. 您没有解码不需要编码的数据 的JavaScript。
  3. 因此,您消除了2个不必要的操作,以及许多浪费的循环(因为这些操作包含在循环中)。

答案 1 :(得分:2)

data[0]看起来像JSON,因此在将其用作对象之前,您必须先解析它。例如$.parseJSON(data[0]).id

答案 2 :(得分:1)

看起来它只是返回一个对象而不是数组,所以你应该能够使用 data.id 访问id属性,不需要指定数组索引。

答案 3 :(得分:1)

尝试在回复标题中添加“Content-Type:application / json”。添加此标题Google Chrome,Opera,Safari和IE会自动将您的字符串转换为JSON对象。

如果添加此标题,则只需要在Firefox上使用parseJSON。

如果您不想添加该标题,则“JSONObject = jQuery.parseJSON(response);”在您的javascript中需要将字符串转换为JSON对象。