我正在构建两个相互依赖的下拉列表,其中第二个列表的选项('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'的选项。
提前多多感谢!!
答案 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
作为方法。