在javascript中从数据库更新JSON
目标:用户单击一个按钮,它从数据库检索json的最新记录,并将绿色led的状态更新为1 到目前为止,我在一个文件index.php中找到了所有代码 php代码在javascript中从数据库更新JSON,javascript,php,html,json,database,Javascript,Php,Html,Json,Database,目标:用户单击一个按钮,它从数据库检索json的最新记录,并将绿色led的状态更新为1 到目前为止,我在一个文件index.php中找到了所有代码 php代码 $sql = "SELECT json FROM `smartlight` ORDER BY timestamp desc limit 1"; $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection)
$sql = "SELECT json FROM `smartlight` ORDER BY timestamp desc limit 1";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
$emparray[] = $row;
}
然后是html
<a href="#" class="btn btn-default" onclick="myFunction()">More Options</a>
是不是因为在我的javascript中,我试图循环通过一些尚未处于正确状态的东西,以便像这样循环
提前谢谢
数据库中的内容是一个字符串。您需要首先解码字符串,以便在运行
json\u encode
时计算整个PHP数组
首先,按如下方式修改PHP代码:
//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
// Decode the string here
$emparray[] = json_decode($row['json']);
}
// Loop the outer array (each part of $row)
for (var i = 0; i < emparray.length; i++) {
// Loop each part of the 'smartdevices' array
for (var j = 0; j < emparray[i]['smartdevices'].length; j++) {
if (emparray[i]['smartdevices'][j]['device'] == "greenled") {
emparray[i]['smartdevices'][j]['state'] = "1";
break;
}
}
}
现在需要循环外部数组,然后循环内部代码
大概是这样的:
//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
// Decode the string here
$emparray[] = json_decode($row['json']);
}
// Loop the outer array (each part of $row)
for (var i = 0; i < emparray.length; i++) {
// Loop each part of the 'smartdevices' array
for (var j = 0; j < emparray[i]['smartdevices'].length; j++) {
if (emparray[i]['smartdevices'][j]['device'] == "greenled") {
emparray[i]['smartdevices'][j]['state'] = "1";
break;
}
}
}
//循环外部数组($row的每个部分)
对于(var i=0;i
您不能像这样混合使用JavaScript和PHP。PHP呈现在服务器端,当发出请求时,JavaScript在页面加载后发生。你需要研究Ajax。你的问题是什么?@OptimusCrime这不是一个问题,在这里寻找类似的东西:emparray[].smartdevices[i]。device==“greenled”
@charlietfl哦,我可能误解了。他只是想在单击按钮时显示预先渲染的内容?那样的话,你是对的。我认为这是一个不使用ajax的动态数据加载的典型案例。获取错误“Uncaught TypeError:无法读取未定义的@cameronmd的属性'length'”。您确定从控制台.log
命令获得了正确的输出吗?我怀疑你创建JSON的方式会有所不同。控制台上显示[Object],然后当我展开它时,它会显示JSON:“{”smartdevices:[{”device:“greenled”,“state:“0”},{”device:“redled”,“state:“1”}]}”请展开对象,打印屏幕并将其附在原始问题上。结构有点问题,我不知道。完成了,我可能在JSON中有点问题,是否需要“smartdevices”部分?