需要帮助jQuery

时间:2011-07-18 11:13:28

标签: javascript jquery

这是我的剧本:

<script type="text/javascript">
var auto_refresh = setInterval(
function () {
$('#alert_div').load('/check_messages.php?timestamp=<?php echo TIMESTAMP2;?>').fadeIn("slow");}, 180000);
$("html,body").scrollTop("alert_div",0);
</script>

实际上,每件事都很好但是...... 如您所见,每3分钟脚本加载check_messages.php文件。如果用户有新消息消息check_messages.php 输出信息,否则输出为空:

echo "";

如果php脚本输出为空,我需要$("html,body").scrollTop("alert_div",0); exetutes,仅用以防万一

4 个答案:

答案 0 :(得分:2)

试试:

<script type="text/javascript">
var auto_refresh = setInterval(
function () {
$('#alert_div').load('/check_messages.php?timestamp=<?php echo TIMESTAMP2;?>', function(response){
    if(resonse != '')
        $("html,body").scrollTop("alert_div",0);
}).fadeIn("slow");}, 180000);
</script>

答案 1 :(得分:1)

load函数将函数作为参数,当请求以响应文本作为第一个参数完成时调用该函数。您可以检查此回调函数中的响应是否为空,如果不是则滚动到顶部。

load之类的请求是异步处理的,这意味着紧接其后的代码将在调用完成之前运行。如果您希望在呼叫完成后发生某些事情,则需要将其包含在完成回调中。出于这个原因,我不希望你的fadeIn调用工作,因为我认为load函数不会返回包含的元素。当load调用返回时,您的文本未包含在文档中。

我还冒昧地将代码从匿名函数中移到一个名为check_messages的函数中。在您的代码中,您在setInterval调用之外滚动到顶部,因此它立即被执行,而不是在检查消息时。

<script type="text/javascript">
function check_messages() {
    $('#alert_div').load('/check_messages.php?timestamp=<?php echo TIMESTAMP2;?>',
         function(responseText, textStatus, XMLHttpRequest) {
              if(responseText != "") {
                  $("html,body").scrollTop("alert_div",0);
              }
         }).fadeIn("slow");
}

var auto_refresh = setInterval(check_messages, 180000);
</script>

答案 2 :(得分:0)

你需要使用类似的东西:

$.get('/check_messages.php?timestamp=<?php echo TIMESTAMP2;?>', function(data) {

  if(data) {
     $('#alert_div').replace(data); 
     $("html,body").scrollTop("alert_div",0);
  }
});

代替。

答案 3 :(得分:0)

我相信您应该使用.load的其他版本 - http://api.jquery.com/load/。 在回调中,您应该检查响应中的任何天气,并根据该条件执行操作。