2017-02-16 67 views
0

宗旨:用户点击一个按钮,它就从绿色的数据库和更新状态JSON的最新记录导致1更新JSON在JavaScript

这里什么我到目前为止,在一个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);

+0

你不能这样混用JavaScript和PHP。 PHP在服务器端呈现,当发出请求时,JavaScript会在页面加载后发生。你需要看看Ajax。 – OptimusCrime

+0

你的问题是什么? – user7417866

+0

@OptimusCrime这不是一个问题 – charlietfl

回答

0

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

获取错误“Uncaught TypeError:无法读取未定义的属性”长度“ – cameronmd

+0

@cameronmd您确定您具有'console.log'命令的正确输出吗?他们的方式你创建你的JSON我怀疑它应该看起来不同。 – OptimusCrime

+0

控制台说[_Object_]然后当我展开它时,它说json:“{”smartdevices“:[{”device“:”greenled“,”state“:”0“},{”device“:”redled“ ,“状态”:“1”}]}“ – cameronmd