如何从ajax请求返回JSON格式的数组?

时间:2014-08-27 14:08:41

标签: php jquery mysql ajax json

我正在构建两个相互依赖的下拉列表,其中第二个列表的选项('sensor_list')取决于在第一个列表中选择的选项('node_list')。为此,我将一个监听器附加到'node_list',当选择一个选项时,我发出一个ajax请求以加载'sensor_list'的数据。两个列表的所有数据都是从同一个数据库加载的。

在那个ajax请求中,我访问了数据库中的'sensors'表,得到了我需要的传感器的'Sensor_ID'和'Sensor_name'。我现在想要的是将这些数据传递回请求的“成功”功能。这是自动完成的吗?我需要将任何参数传递给函数吗?

另外,我需要返回的数据是JSON格式,供以后使用。这怎么可能?

这是PHP代码:

<?php

$con = mysql_connect("localhost", "root", "") or die('connection not made');
$db = mysql_select_db('name_of_db', $con) or die('db not selected');

$query = "SELECT SensorID,Variable FROM sensors WHERE SensorID IN (SELECT SensorID FROM nodesensors WHERE NodeID=node_selected)";
$result = mysql_query($query, $con) or die('query not made');

$options = json_encode($result);


?>

'node_selected'是我通过请求传递的变量,它是我在第一个列表中选择的节点的id。

JavaScript是:

if (node_selected!=0 & node_selected!=null){
                $.ajax({
                    type: "POST",
                    url: "php/fetch_sensors.php",
                    data: node_selected,
                    success: function( options ){
                        ...//here I need the options to be in json format
                    }
                });
            }

'选项'是我想要从请求中返回的数据,它们将成为'sensor_list'的选项。

提前多多感谢!!

3 个答案:

答案 0 :(得分:0)

您可以使用mysql_fetch_assoc功能

尝试将PHP代码更改为以下内容:

<?php

$con = mysql_connect("localhost", "root", "") or die('connection not made');
$db = mysql_select_db('name_of_db', $con) or die('db not selected');

$query = "SELECT SensorID,Variable FROM sensors WHERE SensorID IN (SELECT SensorID FROM nodesensors WHERE NodeID=node_selected)";
$result = mysql_query($query, $con) or die('query not made');

$returnArray = array();
while($row = mysql_fetch_assoc($result)) {
    $returnArray[] = $row;
}

$options = json_encode($returnArray);

?>

答案 1 :(得分:0)

更改

$options = json_encode($result);

echo json_encode($result);

dataType:'json'添加到ajax来电:

$.ajax({
    type: "POST",
    url: "php/fetch_sensors.php",
    data: node_selected,
    dataType: 'json',
    success: function( options ){
        ...//here I need the options to be in json format
    }
});

答案 2 :(得分:0)

首先,stop using ext/mysql if you can

您实际上并未从查询中获取结果。

while ($row = mysql_fetch_assoc($results)) {
    $rows[] = $row;
}

然后你实际上必须将数组发射到响应。

echo json_encode($rows);

jQuery非常聪明地检测JSON并应自动解析它,以便您可以使用options作为对象。如果它不能自动运行,您可以执行以下任何操作:

//php
header("Content-type: application/json")

//javascript
data: node_selected,
dataType: "json",

// *or*
success: function (options) {
    options = JSON.parse(options);
}

最后,由于此请求是幂等检索,因此您应该使用GET而不是POST作为方法。