2011-04-19 132 views
0

我正在使用下面的代码,但我似乎无法得到它的工作。如果任何人能够帮助或者指出我的方向是非常好我试图实现的是一种Facebook风格的警报,其中警报将在不刷新页面的情况下显示。警报的数量来自数据库中的行数。我做什么愚蠢的事情?PHP变量更新使用jQuery

的jQuery:

<script type="text/javascript"> 
var alertNumber = <?php echo $display['alertNumber']; ?>; 
setTimeout(checkVariableValue, 2000); 
function checkVariableValue() { 
    $.ajax({ 
     url: 'jquery.php?query='.alertNumber, 
     success: function(newAlert) { 
      if (newAlert != alertNumber); 
       alertNumber = newAlert; 
       document.getElementById("wibble").innerHTML=alertNumber; 
      } 
    }); 
} 
</script> 
+0

阅读'长轮询'http://stackoverflow.com/questions/333664/simple-long-polling-示例代码 – Dunhamzzz 2011-04-19 14:38:59

+0

以及它在干什么?什么?没有? – Groovetrain 2011-04-19 14:39:56

+0

@Dunhamzzz谢谢我会读一读! – David 2011-04-19 14:41:07

回答

6

此行

 
url: 'jquery.php?query='.alertNumber, 

应该

 
url: 'jquery.php?query='+alertNumber, 
+0

一个额外的好抓住。 – Dutchie432 2011-04-19 14:41:26

+0

locrizak你知道我将如何去循环该函数,以便它每5秒钟检查一次吗? – David 2011-04-19 15:10:20

+0

@David而不是setTimeout你需要setInterval。在setInterval继续之前,setTimeout将只执行一次,直到您清除它。 – locrizak 2011-04-19 15:14:37

2

也许我失去了一些东西,但我没有看到你的页居然附和任何文本为你的函数读取。

3
url: 'jquery.php?query='.alertNumber, 

是我眼中的错。它必须是url: 'jquery.php?query=' + alertNumber,

0

现在你的php代码似乎没有发回任何回应。

一旦你的行中的变量$ Q数量,只要加入这行

echo $q; 

您可能还需要在Ajax请求添加的dataType选项来指定你期待回的响应键入文字

$.ajax({ 
     url: 'jquery.php?query='+alertNumber, 
     dataType : 'text', 
     success: function(newAlert) { 
      if (newAlert != alertNumber); 
       alertNumber = newAlert; 
       document.getElementById("wibble").innerHTML=alertNumber; 
      } 
    }); 
+0

'text'不是有效的数据类型。选项是'xml','json','script'或'html',所以它应该是'html' – Dutchie432 2011-04-19 14:43:52

+0

它是。从文档http://api.jquery.com/jQuery.ajax/ – naiquevin 2011-04-19 14:46:09

+0

确认哦,我的错误。我猜'智能猜测中不会使用'text',而是使用'html'。谢谢。 – Dutchie432 2011-04-19 14:47:39

1

我很抱歉有一个答案。其他人似乎已经找到了这个问题(或者至少一个),我只是觉得这个密度太大而不能发表评论。

我会建议改变你的风格,在数据库中有一个“读取标志”,而不是保留到最后一行(或在你的案例行数),并使用它作为鉴别器。随着消息的增长,您不会希望(可能)数百个结果通过AJAX调用转储。另外,除非您假设一旦它已经显示在用户已经确认的页面上。 (一个例子是最后一分钟的消息弹出,用户同时点击链接 - 现在没有可见性)。

另外,如果您发现该网站是获得大量的流量,它可以同时寻找到推送服务(一篇文章,我发现快速谷歌搜索goes on about it and its benefits

0
var alertNumber = <?php echo $display['alertNumber']; ?>; 
setTimeout(checkVariableValue, 2000); 
function checkVariableValue() { 
    $.ajax({ 
     url: 'jquery.php?query='.alertNumber, 

看到行是值得url属性? 该行不在php脚本中......所以你必须使用一个javascript连接运算符(+)