2011-11-22 463 views
2

有一个搜索,但没有真正表明我的一个好路线(可能是我的坏)。从PHP页面即时更新MySQL - AJAX?

我已经构建了一个系统在iPad上运行 - 并作为进入场地的人员的柜台。实质上,每次在网页上按下一个按钮时,它都会从记录的PHP中简单地插入到MySQL数据库中。

也就是说,当有人进入会场时,当某人离开“离开”时,门上的某人会按下“进入”,并将“及时”插入到MySQL数据库中,并在任何时间我们可以找出场内有多少人。

简单。然而,当然,这很慢,当有多人同时进入会场时,所以我想知道你们会如何处理这个问题。我看过AJAX,我必须承认这不是我的领域,但我已经玩过了。我自然会担心不会丢失任何数据,但是我们也不能让系统等待10秒来重新加载页面。

我最初的想法是有一个AJAX'东西' - 当'IN'/'OUT'按钮被按下时,它调用另一个PHP页面来执行MySQL插入。这是否合理?或者有更好的方法来做到这一点?由于我对AJAX解决方案的担心是,该'insert.php'页面的新调用会取消之前的调用,因此数据可能会丢失?我对吗?

任何人的见解都会非常有帮助。

在此先感谢。

瑞恩

+0

像这样的简单操作不需要10秒钟来重新加载页面。你有没有做过一些分析,看看瓶颈在哪里? – F21

+3

Ajax与您按下按钮并转到其他页面一样,就像现在一样。唯一的区别是您可以更新网页浏览器中的微小更改。但是如果你的查询需要10秒钟的时间,那么使用ajax不会有太大的帮助。 – Matt

+0

你的意思是“多人”10-100或1000. Web服务是一次处理多个请求的。我无法从中看到它需要10秒钟的时间。代码示例可以被折衷。 –

回答

1

你可以使用jquery轻松实现这一点。

首先从主文件发布数据并使用$ _POST ['message']捕获另一个文件中的数据,以确认数据已成功保存,您可以输出json。下面是例子

在HTML或PHP页面

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 

<script type="text/javascript">  
$(document).ready(function() { 


$("#send_data").click(function(event){ 
var message= 'This is my message'; 
sendtodb(message); 
}); 


}); 


function sendtodb(message){ 
$.post("save.php",{message:message},function(data){ 
alert(data.status); 
},"json"); 
} 

</script> 

现在在塞康文件,您将保存数据:

<?php 

$msg=$_POST['message']; 

mysql_query("insert query"); 

json_encode(array('status'=>'data saved')); 

?> 
1

你可能最好能够对布局多个按钮,像:

IN:1 2 3 4 5 6 7 8 9 10 OUT:1 2 3 4 5 6 7 8 9 10

它会节省发送请求的数量(并且需要按相同的按钮10次)。

除此之外,Ajax可能是一个想法,但你需要一些输出给用户,以便他们知道他们按下按钮实际上已经做了一些事情(因为它不刷新页面,它不明显,它的做法任何东西)。

但是,如果重新加载页面需要很长时间,那么瓶颈可能并不是因为页面正在重新加载 - 可能是服务器因请求而过载(上面的建议应该减少),或者可能会是一些写得不好的代码需要一段时间才能执行的结果。

+0

感谢您的想法尼克,非常感谢。我已经放入了一个“计数器”,以便用户可以看到它上下移动,当然,我需要将其更改为ajax。问题不在于服务器端,如果使用宽带连接的笔记本电脑,这是一个完美的解决方案,但是在3G iPad上,它并不是那么棒... aaaah! – Ryan

+0

啊,所以问题是iPad上的3G连接不够可靠。没有什么可以做的。 Ajax无能为力 - Ajax请求将无法连接/超时。 – Nick

0

我认为使用AJAX是向前来这里的路上,和jQuery做的确很容易。只是一些额外的想法和意见:

  1. 如果用户点击保持之前的AJAX请求已实际完成的,特别是如果服务器过载潜在可能发生的竞争条件。我会做谷歌搜索在这里做什么,并确保你保留了以前的AJAX请求的记录,并取消它,当一个新的启动时,请参阅this other post

  2. 随着你的后端PHP脚本,我认为这是很有可能这将构成更大的PHP应用程序的一部分。尽量确保可能为前端网站完成的任何其他处理(例如构建菜单)不会在AJAX请求上完成,因为您不需要它,这只会浪费处理器时间。

  3. 为了更健壮,请发送一个PHP脚本的返回值,其中可能包含一个状态码,以便您可以检测到呼叫是否实际完成。