2013-04-07 77 views
0

我有在$ 的setInterval(文件)的问题。就绪(函数(){}MySQL查询不上的setInterval

什么我做的是设置的时间间隔做回最新结果是调用运行MySQL的一些查询一个PHP脚本来检查4个开关的状态,然后更新屏幕中的值在数据库中,像这样:

$(document).ready(function(){ 

setInterval(function(){ 

<?php require('fetchSwitchStatuses.php'); ?> 

$("#switch1").css('background', 'rgb(<?php echo $switchColor1 ?>)'); 
$("#switch1").html('<?php echo $switchState1 ?>'); 
$("#switch2").css('background', 'rgb(<?php echo $switchColor2 ?>)'); 
$("#switch2").html('<?php echo $switchState2 ?>'); 
$("#switch3").css('background', 'rgb(<?php echo $switchColor3 ?>)'); 
$("#switch3").html('<?php echo $switchState3 ?>'); 
$("#switch4").css('background', 'rgb(<?php echo $switchColor4 ?>)'); 
$("#switch4").html('<?php echo $switchState4 ?>'); 
    },1000); 

}); 

这里是fetchSwitchStatuses.php代码:

$connect = mysqli_connect("localhost", "root", "root"); 
mysqli_select_db($connect, "db_name"); 


$fetch1 = mysqli_query($connect, 
"SELECT SwitchStatus FROM Switches WHERE PinNumber = '3'" 
); 
$fetch2 = mysqli_query($connect, 
"SELECT SwitchStatus FROM Switches WHERE PinNumber = '5'" 
); 
$fetch3 = mysqli_query($connect, 
"SELECT SwitchStatus FROM Switches WHERE PinNumber = '6'" 
); 
$fetch4 = mysqli_query($connect, 
"SELECT SwitchStatus FROM Switches WHERE PinNumber = '9'" 
); 


$i = 1; 

while($row = mysqli_fetch_array(${'fetch'.$i})) 
{ 

    if($row['SwitchStatus'] == 0) 
    { 
     ${'switchColor'.$i} = "255, 0, 0"; 
     ${'switchState'.$i} = "OFF"; 

    } 
    else if ($row['SwitchStatus'] == 1){ 
     ${'switchColor'.$i} = "0, 255, 0"; 
     ${'switchState'.$i} = "ON"; 
    } 
    else { 
     ${'switchColor'.$i} = "100, 100, 100"; 
     ${'switchState'.$i} = "ERROR"; 
    } 
$i++; 
} 


mysqli_close($connect); 

加载页面时,信息是正确的,数据库中的任何内容都是屏幕上的颜色反映的。

当我单击对象来更改值时,将进行所有必要的更改并更新数据库。但是,间隔重复时出现问题。值被切换回页面加载时的原始值。因此,尽管数据库中的信息已正确更改,但由于某些原因,按钮的颜色始终会重置为查询所读取的第一个值。

我该如何解决这个问题,以便屏幕上反映的信息是准确的?

+0

你更新'$ switchColor1','$ switchColor2'和...数据库更新后? – Amir 2013-04-07 16:24:23

+0

其实我不认为我已经在任何地方使用数据库更新...我有点困惑。那么,在价值改变之后,你的意思是什么?这里是的值中的一个是如何改变的例子: \t $ changeValue = mysqli_query($ CONNECT, \t “UPDATE交换机 \t SET SwitchStatus = 1 \t WHERE PinNumber = 9” \t \t ); – Moose 2013-04-07 16:37:59

+0

问题是你在哪里设置和更新'$ switchColor1'和...? – Amir 2013-04-07 16:42:03

回答

1

使用AJAX技术,您可以: 通过请求页面(.txt .js .html或甚至php)发送请求并从服务器获取结果。
所以用AJAX你可以得到一个页面的结果保存到数据库的东西,从数据库中得到的东西,你可以使用会话和任何你可以用PHP文件做的事情。 当您发送AJAX请求以查看页面(即/userData.php?userId=5)时,页面/userData.php?userId=5将被执行,并且其输出将被返回(HTML或只是一个单词'是“或”否“或”您无法访问此用户的信息“)。
您可以使用POST或GET将数据发送到文件。但问题是如何从页面获取数据。因为结果AJAX会给你就是被请求的页面回显到页面这样

<html> 
…. 
</html> 

或者

‘Yes’ 

或者

<?php echo ‘something’; ?> 

那么,关于获取日期的行或很多数据?因为你唯一得到的是一个文本或者一个长文本。
为此,您可以使用JSON,它就像嵌套数组一样。

[ 
{ 
"term": "BACCHUS", 
"part": "n.", 
"definition": "A convenient deity invented by the...", 
"quote": [ 
"Is public worship, then, a sin,", 
"That for devotions paid to Bacchus", 
"The lictors dare to run us in,", 
"And resolutely thump and whack us?" 
], 
"author": "Jorace" 
}, 
… 

而且这也是一个字符串。但是,您可以在jQuery中使用$ .getJSON获取Data,并且可以像这样在服务器端生成JSON数据。

<?php 
$arr=array(
‘data’=>’ffff’, 
‘anotherData’=>array(‘rrrrr’,’sssss’); 
); 
Echo json_encode($arr); 
?> 

Json_encode()在PHP得到一个数组并返回它的JSON字符串。我们回应它。 现在我们可以使用jQuery来获取将从服务器检索到的数据。
此部分,如果从
学习jQuery的1.3
更好的互动设计和网页发展与简单
的JavaScript技术
乔纳森包布
卡尔斯威德伯格

全球jQuery函数
对于这一点,所有的jQuery方法我们用过的附加到我们用$()工厂函数构建的jQuery对象。选择器允许我们指定一组DOM节点来处理,并且方法以某种方式对它们进行操作。但是,$ .getJSON()函数是不同的。没有可以应用的逻辑DOM元素;必须将结果对象提供给脚本,而不是注入页面。由于这个原因,getJSON()被定义为全局jQuery对象(一个名为jQuery的对象,或由jQuery库定义的$)的方法,而不是单个的jQuery对象实例(我们用$ )功能)。
如果JavaScript有类似其他面向对象语言的类,我们会调用$ .getJSON()类方法。为了我们的目的,我们将这种类型的方法称为全局函数;实际上,它们是使用jQuery名称空间的函数,以免与其他函数名称发生冲突。
要使用此功能,我们通过它之前的文件名如:

$(document).ready(function() { 
$('#letter-b a').click(function() { 
$.getJSON('b.json'); 
return false; 
}); 
}); 

此代码有当我们点击的链接没有明显的影响。函数调用加载文件,但我们没有告诉JavaScript如何处理结果数据。为此,我们需要使用回调函数。
的$ .getJSON()函数获得一个第二个参数,这是一种在加载完成时要调用的函数。如前所述,AJAX调用是异步的,回调提供了一种等待数据传输的方式,而不是立即执行代码。回调函数也需要一个参数,它由结果数据填充。所以,我们可以这样写:

$(document).ready(function() { 
$('#letter-b a').click(function() { 
$.getJSON('b.json', function(data) { 
}); 
return false; 
}); 
}); 

这里我们使用了一个匿名函数作为我们的回调,因为在我们为简洁的jQuery代码已经屡见不鲜。可以同样提供一个命名函数作为回调函数。
在这个函数中,我们可以根据需要使用数据变量来遍历数据结构。我们需要迭代顶层数组,为每个项目构建HTML。我们可以用循环的标准来做到这一点,但我们将引入另一个jQuery的有用全局函数$ .each()。我们在第5章看到了它的对手,.each()方法。这个函数不是使用jQuery对象,而是使用数组或映射作为第一个参数,并使用回调函数作为第二个参数。每次遍历循环时,数组或映射中的当前迭代索引和当前项作为两个参数传递给回调函数。

$(document).ready(function() { 
$('#letter-b a').click(function() { 
$.getJSON('b.json', function(data) { 
$('#dictionary').empty(); 
$.each(data, function(entryIndex, entry) { 
var html = '<div class="entry">'; 
html += '<h3 class="term">' + entry['term'] + '</h3>'; 
html += '<div class="part">' + entry['part'] + '</div>'; 
html += '<div class="definition">'; 
html += entry['definition']; 
html += '</div>'; 
html += '</div>'; 
$('#dictionary').append(html); 
}); 
}); 
return false; 
}); 
}); 

循环之前,我们空了出来,这样我们就能和新落成的HTML填充它。然后我们使用$ .each()依次检查每个项目,并使用入口映射的内容构建HTML结构。最后,我们把这个HTML附加到一个DOM树中。

这种方法假定该数据是HTML安全食用;例如,它不应该包含任何流浪的<字符。

+0

圣牛,谢谢你这是伟大的!我现在要仔细阅读这个(现在已经过了一半了)!我非常感谢你帮助我的时间= D – Moose 2013-04-07 18:44:46

+0

你是否推荐使用这种方法或使用websockets? – Moose 2013-04-07 18:47:29

+1

你的受欢迎的人。你可以给我一些支持我的爱(如果你认为它的正确和有用,请投我的答案和评论并接受我的回答) – ncm 2013-04-07 18:50:09