【问题标题】:Jquery - How do I make ifModified:true work in .ajax request?Jquery - 如何使 ifModified:true 在 .ajax 请求中工作?
【发布时间】:2022-03-31 13:41:47
【问题描述】:

我有一个简单的脚本,其中每 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 的背景。我的想法是,当路径与之前使用的路径相同时,图像不应重复淡出和淡入,而应保持静止,直到提供新路径。

我错过了什么?

【问题讨论】:

  • ext.php 可能没有在其标题中设置最后修改时间。 (该文件的源代码可能有助于调试。)
  • 我在问题中添加了 php 代码

标签: jquery ajax


【解决方案1】:

当一个 Ajax 请求成功完成时,使用 3 个参数调用 success 回调:

  1. data返回的数据
  2. status 文本状态字符串,值为 "success"
  3. jqXHR 返回的 jQuery XMLHttpRequest 对象(此参数与此问题无关,因此我省略了更多信息。阅读更多 here

当您在 Ajax 请求上设置属性 ifModified: true 时,在同一 URL 上具有相同数据的第二次请求后,将使用 3 个参数调用 success 回调:

  1. data 返回的数据有值undefined
  2. status 文本状态字符串,值为 "notmodified"
  3. jqXHR 返回的 jQuery XMLHttpRequest 对象(此参数与此问题无关,因此我省略了更多信息。阅读更多 here

在成功回调中,您必须检查status 的值,如果status === "success" 然后继续,如果状态等于"notmodified",您什么都不做。

    success: function(data, status) {
        if (status === "success") {
            // New data received, do what you want
        } else {
            // if not modified data is undefined 
        }
    }

奖励:如果status === "notmodified" 通过jqXHR.responseText,您可以从缓存中获取旧数据。如果您的dataType 不是文本(即JSON、JSONP、脚本等),您必须先将字符串jqXHR.responseText 转换为您想要的数据类型。

【讨论】:

  • 如果我总是想处理“内容”怎么办?有没有办法获取“缓存”数据?
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 2012-04-22
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多