为什么我不能使用数据[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为空)
答案 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()调用。该解决方案将比已接受的解决方案更有效,后者无法解决实际问题。
因为
会更有效率因此,您消除了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对象。