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 (并且我的数据 var 为空)

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,这导致内部 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 编码的数据。

因此,您消除了 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 对象。

如果您添加此标头,则仅在 Firefox 上才需要 parseJSON。

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

于 2013-01-29T19:13:33.947 回答