如何检查jQuery.ajax()请求标头状态是否为“304 Not Modified”?

时间:2011-03-02 21:22:51

标签: ajax jquery header http-status-code-304

如何检查jQuery.ajax()请求标头状态是否为“304 Not Modified”?

jqXHR.status通常会返回200,即使请求的标题是“304 Not Modified”。

ifModified:true does not help很多因为它会破坏XHR数据请求。

4 个答案:

答案 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)

我有一种实施方式 https://github.com/laukstein/ajax-seo/blob/cbed03222d89f6f7e75dc49ce8882c30201bbb86/index.php#L266-274

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并按照相同的步骤操作。