Empêcher le cache dans chaque demande de Dojo xhr sur la page

Je peux intercepter les requêtes Dojo 1.6.1 xhr à l'aide de IO Pipeline Topics comme décrit ici:

Dojo – intercepter les appels XHR

J'aimerais ajouter un paramètre de temps à l'URL (fe &time=12345 ) pour empêcher le cache dans certaines (ou toutes) les requêtes xhr GET provenant de dojox.data.JsonRestStore (les détails de ce que j'essaie d'atteindre sont ici ). Mon code ressemble à ceci:

 dojo.subscribe("/dojo/io/send", function(deferred) { if (deferred.ioArgs.url.indexOf("restService1") > -1) { deferred.cancel(); deferred.ioArgs.url += '&time=12345' // test value at this point dojo.xhrGet(deferrred.ioArgs); } }); 

Essentiellement, j'essaie d'annuler la demande, d'ajouter une chaîne à l'URL, puis de faire la demande avec l'URL modifiée.

Cela ne fonctionne pas du tout: la demande avec l'URL modifiée ne se termine pas par le serveur et je reçois beaucoup de ces erreurs dans la console du navigateur:

Erreurs Chrome

Les erreurs se produisent à la ligne 14 de dojo.js. L'onglet Chrome s'arrête éventuellement après ces erreurs.

J'ai également essayé de modifier deferred.ioArgs.url et de ne rien faire d'autre que cela n'a aucun effet.

dojo/io/script et dojo/xhr ont un paramètre preventCache qui fait exactement ce que vous essayez de faire. Alors, au lieu d'essayer d'intercepter, pouvez-vous simplement ajouter preventCache: true aux arguments de la demande?

http://dojotoolkit.org/reference-guide/1.6/dojo/io/script.html#dojo-io-script

http://dojotoolkit.org/reference-guide/1.6/dojo/xhrGet.html#dojo-xhrget

La réponse vient encore une fois de Sven Hasselbach :

 /** * Cache Prevention for Dojo xhr requests * * Adds no-cache header and enables dojo's preventCache feature * for every dojo xhr call. This prevents the caching of partial * refreshs. * * @author Sven Hasselbach * @version 0.3 * **/ dojo.addOnLoad( function(){ if( !dojo._xhr ) dojo._xhr = dojo.xhr; dojo.xhr = function(){ try{ var args = arguments[1]; args["preventCache"] = true; args["headers"] = { "cache-control": "no-cache" }; arguments[1] = args; }catch(e){} dojo._xhr( arguments[0], arguments[1], arguments[2] ); } } ) 

http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests

Je l'ai essayé et il fait exactement ce que je cherchais en ajoutant &dojo.preventCache=1359366392301 paramètre aux URL xhr. Et il semble ajouter un en tête de contrôle de cache aussi.