Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中从数据库更新JSON_Javascript_Php_Html_Json_Database - Fatal编程技术网

在javascript中从数据库更新JSON

在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)

目标:用户单击一个按钮,它从数据库检索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));

//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”部分?