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:
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.