我有一个简单的脚本,其中每 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 的背景,并带有 fadeOut 和 fadeIn。我的想法是,当路径与之前使用的路径相同时,图像不应重复淡出和淡入,而应保持静止,直到提供新路径。
我错过了什么?
最佳答案
当 Ajax 请求成功完成时,success
使用 3 个参数调用回调:
-
data
返回的数据 -
status
文本状态字符串,值为"success"
-
jqXHR
返回的 jQuery XMLHttpRequest 对象(此参数与此问题无关,因此我省略了更多信息。了解更多 here )
当您设置属性 ifModified: true
时在 Ajax 请求上,在同一 URL 上使用相同数据的第二个请求之后 success
使用 3 个参数调用回调:
-
data
返回的数据值为undefined
-
status
文本状态字符串,值为"notmodified"
-
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
到您想要的数据类型。
关于Jquery - 如何发出 ifModified :true work in . ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18227178/