【问题标题】:Update JSON from database in javascript在 javascript 中从数据库更新 JSON
【发布时间】:2017-02-16 13:26:50
【问题描述】:

目标:用户点击一个按钮,它从数据库中检索 json 的最新记录并将绿色状态更新为 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

<script type="text/javascript">
function myFunction(){

    var emparray = <?php echo json_encode($emparray) ?>;

    console.log ( emparray );

    for (var i=0; i<emparray.length; i++) {
        if (emparray[i].device == "greenled") {
                emparray[i].state= "1";
            break;
        }
    }

    console.log ( emparray );

}

</script>

两个 console.log 产生相同的东西...

"{"smartdevices":[{"device":"greenled", "state":"0"},{"device":"redled", "state":"1"}]}"

是不是因为在我的 javascript 中,我试图循环一些尚未处于正确状态的东西,以便像这样循环?

提前致谢

console.log ( emparray );

【问题讨论】:

  • 你不能像这样混合使用 JavaScript 和 PHP。 PHP 在服务器端呈现,当发出请求时,JavaScript 在页面加载后发生。您需要研究 Ajax。
  • 你有什么问题?
  • @OptimusCrime 这不是问题
  • 寻找类似的东西:emparray[].smartdevices[i].device == "greenled"
  • @charlietfl 哦,我可能误会了。他只是想在单击按钮时显示预先渲染的东西?在那种情况下,你是对的。我认为这是不使用 ajax 的动态数据加载的经典案例。

标签: javascript php html json database


【解决方案1】:

您数据库中的内容是一个字符串。您需要先解码字符串,以便在运行 json_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;
        }
    }
}

【讨论】:

  • 出现错误“未捕获的类型错误:无法读取未定义的属性‘长度’”
  • @cameronmd 你确定你有来自console.log 命令的正确输出吗?他们创建 JSON 的方式我怀疑它应该看起来不同。
  • 控制台说 [Object] 然后当我展开它时,它说 json: "{"smartdevices":[{"device":"greenled", "state" :"0"},{"device":"redled", "state":"1"}]}"
  • 请展开对象,打印屏幕并将其附加到您的原始问题中。我没有得到的结构有问题。
  • 完成,我的 JSON 可能有问题,'smartdevices' 部分是否必要?
猜你喜欢
  • 2018-02-28
  • 2013-06-20
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2015-06-30
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多