如何检查jQuery.ajax()请求标头状态是否为“304 Not Modified”?
jqXHR.status
通常会返回200
,即使请求的标题是“304 Not Modified”。
ifModified:true
does not help很多因为它会破坏XHR数据请求。
答案 0 :(得分:0)
如果响应来自缓存,则还会缓存标头。我把这当作一次机会。 我的服务器发送一个唯一的md5标头。这与?query = time()的效果不同。现在在JS端验证最新的md5标头与当前。如果您收到与响应来自缓存之前相同的MD5标头。我忘了关于JQuery的一切,但看到它可以设置和读取标题。
<?php
$oldMD5=filter_input(INPUT_SERVER,'HTTP_CONTENT_MD5',int);
if(!empty($oldMD5)){
header('Content-MD5: '.(1+(int)$oldMD5));
}
--------------------------------------------------------------
<script>
var oldMD5=0;
//your Ajax implementation
Ajax.setRequestHeader('Content-MD5',''+oldMD5);
var newMD5=parseInt(Ajax.getResponseHeader('Content-MD5'),10);
if(newMD5 && oldMD5<newMD5,10){
oldMD5=newMD5;
//not cached
}else{
//cached
}
这有点滥用,因为md5应该是一个散列,用于验证解码数据是否与最初发送的数据相同&#39;。
答案 1 :(得分:-3)
var cache;
$.ajax({
...
beforeSend: function() {
cache = setTimeout(function() {
console.log('The content not cached jet.');
}, 300);
},
success: function(data) {
if (cache) {
clearTimeout(cache);
}
}
});
答案 2 :(得分:-5)
也许试试这个?
$.ajax({
url: 'your-url',
dataType: 'script',
complete: function(xhr) {
if (xhr.status == 304) return;
// or better: if (xhr.status != 200) return;
// your code goes here
}
});
答案 3 :(得分:-5)
打开浏览器检查器,它会显示有关ajax请求的信息,包括状态。
表示chrome,右键单击并选择inspect元素,然后转到Network选项卡。
对于firefox,只需使用firebug并按照相同的步骤操作。