3

我有一个简单的脚本,其中每 2 秒发出一个 Ajax 请求。如果从名为“ext”的 php 页面获取的数据与上次获取的数据不同,代码会运行一个函数:为了做到这一点,我在 ajax 请求上使用了 ifModified:true 设置,但它不起作用。

这是我正在使用的代码

$(document).ready(function(){

setInterval(repeat,2000);

function repeat(){
$.ajax({
  type: "GET",
  url: "ext.php",
  ifModified: true,
  success:function(data) {
$('.photo').fadeOut(5000).delay(1000).css('background-image', 'url(' + data + ')' ).fadeIn(5000);
}
});
}

});

这是在“ext.php”中找到的代码:它的目的是将最后添加的 jpg 的路径简单地输出到目录中。

<?php
$array = glob("images/{*.jpg,*.JPG}", GLOB_BRACE);
$ultimo = end($array);
?>
<?php echo $ultimo; ?>

目前,该脚本将一个图像(其路径在 ext.php 中找到)设置为具有“.photo”类的 div 的背景,该类具有淡出和淡入。我的想法是,当路径与之前使用的路径相同时,图像不应重复淡出和淡入,而应保持静止,直到提供新路径。

我错过了什么?

4

1 回答 1

6

当一个 Ajax 请求成功完成时,“success”回调会使用 2 个参数调用:接收到的数据和一个值为“success”的状态字符串。(第三个参数与这个问题无关,所以我省略了它)

当您将属性“ifModified”设置为 Ajax 请求时,在同一 URL 上的第二个请求中,将使用 2 个参数调用成功回调:一个未定义的值和一个值为“nonmodified”的状态字符串。(第三个参数与这个问题无关,所以我省略了它)

实际上,在成功回调中,您必须检查“状态”值(第二个参数):如果它是“成功”,则继续,如果它是“未修改”,您什么也不做。

success: function(data, status) {
    if (status === "success") {
        // New data received, do what you want
    } else {
        // Old data received, ignore or similar
    }
}
于 2013-10-30T16:42:10.937 回答