数组中的JSON返回列表

时间:2014-04-29 00:38:27

标签: php ajax json

我尝试使用AJAX生成带有复选框的名称列表。不幸的是,使用下面的代码,我只返回一个名称,而不是我的数据库中的四个名称。

这是我使用的代码,它位于由AJAX调用的单独的php文件中:

$query = "SELECT id, first_name, last_name, email FROM users WHERE location_id = '{$location_id}' ";

    $result = mysqli_query($connection, $query);
    if (!$result) {
        die("Database query failed: " . mysqli_error($connection));
    }

while ($row = mysqli_fetch_array($result)) {
        $name = $row['first_name'] . " " . $row['last_name'];
        $attendees = '<label><input type="checkbox" name="emp_name[]" id="emp_name[]" value="' . $name . '"> ' . $name . '</label><span style="padding-right: 20px;"></span>';
}

echo json_encode(array('attendees'=>$attendees));

在我尝试这个AJAX调用之前,我在主文档中使用echo而不是$attendees进行了相同的查询,并且它运行完美。它返回了所有四个名称旁边的复选框。以下是该代码的摘录:

while ($row = mysqli_fetch_array($result)) {
                $name = $row['first_name'] . " " . $row['last_name'];
                echo '<label><input type="checkbox" name="emp_name[]" id="emp_name[]" value="' . $name . '"> ' . $name . '</label><span style="padding-right: 20px;"></span>';
            }

我对AJAX很新,所以我不确定问题出在哪里。请帮忙!

2 个答案:

答案 0 :(得分:1)

每次迭代都会覆盖$attendees

  • 如果您想要一个数组,请在循环前使用$attendees=array();并在循环内使用$attendees[] = '<la..
  • 如果要连接,请在循环前使用$attendees='';并在循环内使用$attendees .= '<la..

答案 1 :(得分:0)

我认为你不明白json的观点。这是一种编码数据的方法。

您正在尝试传回html标记而不是原始数据,json编码。如果你想这样做,那么丢失json,只需在你的前端代码中添加或替换你从ajax调用中获得的html,使用如下的javascript:

document.getElementById("emplist).innerHTML = ...

否则,你的fetch循环应该更像这样:

while ($row = mysqli_fetch_array($result)) {
    $attendees[] = $row;        
}
echo json_encode(array('attendees' => $attendees));

无论哪种方式,您仍然需要$与会者[] =所以您将每一行存储到一个数组。