2

这实际上是一个简短的问题,关于获取由 PHP 脚本回显并由 Javascript 接收/处理的数组的值。

问题的开头应该提供足够的信息供某人回答;我的各种失败的实验构成了这个冗长问题的其余部分。

通过 jQuery AJAX 回调接收到一个数组,但我未能成功获取这些值。

这是ajax调用:

$.ajax({
    type: "POST",
    url: "ajax/ax_all_ajax_fns.php",
    data: 'request=edit_timecard_entry&staff_id='+staff_id+'&tid='+tid,
    success: function(data){
        alert(data);
    }
}

下面是 ax_all_ajax_fns.php 发出的代码:

$staff_id = $_POST['staff_id'];
$t_id = $_POST['tid'];
$rCard = mysql_query("SELECT `staff_id`, `date`, `project_id`, `project_num`, `task_desc`, `hours` FROM `timecards` WHERE `t_id`='$t_id'");
$aCard = mysql_fetch_assoc($rCard);
print_r($aCard);
//  echo $aCard;

当然,我不希望信息 print_r'd,我希望它得到回应。print_r 用于证明 PHP 脚本发出了正确的数据,并在成功函数的 alert() 框中成功回显。因此,正在返回正确的数据,并且(如果格式正确)它是可见的。以这种方式返回的数据在 alert() 弹出窗口中如下所示:

Array
(
    [staff_id] => 51
    [date] => 2012-10-18
    [project_id] => 0
    [project_num => 49
    [task_desk] => This is a task
    [hours] => 3.30
)

但是,当我使用 echo 输出 $aCard 数组,然后尝试在 ajax 调用的成功函数中将其分解时,我无法弄清楚如何获取这些值。我的尝试始终返回“未定义”的值。

在成功功能中,代替alert(data);,我已经尝试过:

var tce_staff_id = data['staff_id'];
alert(tce_staff_id);

和这个:

var tce_staff_id = data.staff_id;
alert(tce_staff_id);

我错过了什么?

更新:

感谢 Martin S. 提供有关 json_encode() PHP 指令的信息。我修改了ajax脚本如下:

echo json_encode($aCard);

我现在从警报(数据)中得到这个结果;在成功函数中:

{"staff_id":"51","date":"2012-10-18","project_id":"0","project_num":"49","task_desc":"This is a task","hours":"3.30"}

但是,以下返回“未定义”:

alert(data.staff_id);
alert(data[0].staff_id);
var test = data.staff_id;
alert(test);

谁能看到我错过了什么?上面的所有代码都紧跟在alert(data)ajax 函数的成功回调之后。alert(data)确实可以工作并显示所需的数据,如上所述。

4

1 回答 1

3

好的,所以 Martin S 有正确的答案。我希望他能留下来获得功劳。他的回答只漏掉了一个元素:

阿贾克斯输出:

echo json_encode($aCard);

JAVASCRIPT成功回调函数:

var obj = jQuery.parseJSON(data);
alert(obj.date);
alert(obj.staff_id);

瞧!日期和 staff_id 出现在警告框中。

谢谢,马丁,让我走上了正轨。

于 2012-11-19T23:10:05.853 回答