2011-10-01 83 views
1

我有一个index.php。 它有一个登录功能。 比方说,我有两个用户A和B.提醒另一个页面

第1页(的index.php用户A的) -with功能(检查是否有数据库的变化,如果是:警报(“消息”))

第2页(index.php文件的用户B) -with按钮,点击要更新数据库

我已经可以更新数据库时,从第1页已经工作的功能,它可以检测到的变化,但只有当你重装它。所以我想在页面2更新数据库时重新加载Page1。我想在Page1中使用setTimeout(something,timeInterval),但它看起来并不合适,因为Page1的组件每次重新加载时都会闪烁。我想第1页重新加载当且仅当我的数据库中有更改。我也想过把Page1的功能放在一个无限的while循环中,但它看起来并不合适,因为页面刚加载。

另一件事是,我被告知有关JSON和REST。所以我可以从脚本文件访问数据库。但我并不那么认识。我也没有在jQuery中。

我试过寻找刷新从另一个页面,但我发现的答案要么是模糊的,要么是困难的。而且我的网页具有相同的名称,它们仅与登录的用户有所不同。但是,如果我可以找到一种方法来执行此操作,那么我只需使用我的网页名称进行操作。

有没有其他办法可以做到这一点?谢谢。

+0

我的建议:http://www.zeitoun.net/articles/comet_and_php/start –

+0

当过你更新数据库做标记为高,如果标记为高,则显示写第1页cron作业,这将检查一条警告消息。您的cron作业可以在特定时间间隔后重复运行 – Astha

回答

0

当你想更新首次加载,通过做

something = new Date().getTime();

把时间在一个变量发送一个XMLHttpRequest到检查,如果数据库最后更新时间是比时间较新的一个PHP页面与ajax呼叫一起发送。如果是,则返回一些告诉JavaScript刷新页面的内容。如果没有,请让JavaScript在几秒钟内拨打另一个电话setTimeout

如果在使用jQuery之前学会了JavaScript的绳索会更好,所以我会在一秒钟内用一些脚本更新这个答案。

编辑1:退房https://developer.mozilla.org/en/AJAX/Getting_Started

使用jQuery的Ajax调用是jQuery的最明智的用途之一,但它是更好,如果你知道它是如何工作了。

+0

是否可以从脚本调用php函数? – user974227

+0

不是没有ajax调用。 PHP是服务器端,这意味着它只能在服务器上运行。 – mowwwalker

+0

哦,好的。谢谢。 – user974227

0

所以你基本上需要服务器在更新可用时通知page1。你看到的是所谓的“彗星”。看看这个文章:

comet wikipedia

comet ajaxian

彗星编程可以使用AJAX或iFrame

+0

是的。这正是我需要的。我的页面应该像一个服务器..它检查数据库更新 – user974227

0

创建pageC.php应检查是否数据库已经改变,如果是的话,输出1做别的,没有输出。

然后用jQuery和AJAX ...

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Quick AJAX test</title> 
    <!-- needs to be url to jquery, can be locally, or via CDN --> 
    <script type="text/javascript" src="jquery"></script> 
    <script type="text/javascript"> 
    // this executes all contained after page has fully loaded 
    $(function(){ 
     // define function to check for changed database 
     function checkNew(){ 
     // make AJAX GET request, and set callback function 
     $.get('./pageC.php',function(data){ 
      // check if the data returned (page content) is 1 
      if(data === '1') 
      alert('The database has changed') 
      // run the function to check again 
      checkNew() 
     }) 
     } 
     // call the checking function to initialise the loop 
     checkNew() 
    }) 
    </script> 
</head> 
<body> 

</body> 
</html> 
+0

这是非常有帮助的。 Page1已经具有监视数据库的功能。 – user974227

+0

值得注意的是,一旦它收到回应,这将会立即重新检查变化,所以会有很多网络流量,并且还有一个非常活泼的页面更新。如果你希望检查次数少一点,比如说每秒一次,你应该使用'setTimeout(checkNew,1000)'并将当前调用移除到'checkNew()'。 –

+0

我试过这个。但是,我仍然需要重新加载Page1以查看警报消息 – user974227