web-dev-qa-db-fra.com

Comment vérifier si l'en-tête de requête jQuery.ajax () est "304 non modifié"?

Comment vérifier si jQuery.ajax () en-tête de la demande est "304 non modifié"?

jqXHR.status renvoie généralement 200, même si l'en-tête demandé est "304 non modifié".

ifModified:truen'aide pas beaucoup car il coupe la demande de données XHR.

44
Binyamin

De plus, les en-têtes seront mis en cache si la réponse provient du cache. J'ai pris cela comme une chance. Mon serveur envoie un en-tête md5 unique. Cela n'a pas le même effet que? Query = time (). Maintenant du côté JS, vérifiez le dernier en-tête md5 avec le courant. Si vous recevez le même en-tête MD5 qu'avant, la réponse provient du cache. J'ai tout oublié de JQuery mais j'ai vu qu'il était possible de définir et de lire les en-têtes.

<?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
}

C'est un peu abusif, car md5 devrait être un hachage permettant de vérifier que les "données décodées sont les mêmes données que celles envoyées initialement". 

0
B.F.