2010-05-17 5 views
1

J'essaie d'écrire une application Web hors ligne à l'aide de jqtouch/jquery. Lorsque je désactive ma connectivité, il semble que la fonction jquery .load() échoue silencieusement et n'appelle même pas sa fonction de rappel. J'ai mis $.ajaxSetup ({cache: true}); mais il semble n'avoir aucun effet. J'ai aussi mon fichier manifeste etc. fonctionne bien - le seul problème est la fonction .load().La fonction JQuery .load() échoue silencieusement en mode hors connexion

Des idées?

+0

Avez-vous essayé d'utiliser l'extension de débogage hors ligne JQTouch? Consultez http://code.google.com/p/jqtouch/wiki/OfflineSupport pour plus d'informations. – smountcastle

+0

J'ai essayé ceci mais cela vous indique seulement que le cache est rempli - pas de détails. – edoloughlin

Répondre

0

Il s'avère que, comme je l'appelais, .load() lui faisait faire un POST au lieu d'un GET, ce qui signifiait qu'il contournait le cache.

Je l'ai appelé comme

$.('#some-element').load('path/to/data', 
         [], 
         function(responseText, status, XMLHttpRequest) { 
          alert("Load finished: " + status + ". " + responseText); 
         } 
         ); 

Je supposais deuxième tableau vide était l'invocation correcte, mais cela fait JQuery faire un POST, probablement avec zéro arguments. L'invocation correcte pour un GET est:

$.('#some-element').load('path/to/data', 
         function(responseText, status, XMLHttpRequest) { 
          alert("Load finished: " + status + ". " + responseText); 
         } 
         ); 
0

Êtes-vous au service de vos fichiers manifest avec le bon type MIME? De JQTouch Offline Support:

En outre, le manifeste doit être servi avec un type MIME text/cache-Mainfest, que vous pouvez accomplir la plupart serveurs avec une directive .htaccess:

AddType text/cache-manifest .manifest

pour mettre en œuvre le Manifest Cache, simplement référence dans votre code HTML comme ceci:

<html manifest="sample.manifest">
+0

Oui. Tout le reste de l'application fonctionne parfaitement hors ligne. Mon seul problème est avec la fonction .load() qui échoue silencieusement et n'appelle pas son callback. – edoloughlin

0

fichiers locaux renvoient 0 code d'état HTTP. C'est parce qu'ils ne sont pas récupérés avec HTTP (c'est local!). jQuery traite cela comme une erreur, ce qui n'est pas nécessairement mauvais.

Essayez le gestionnaire onComplete pour récupérer le code d'état, comparez-le à 0 et essayez de lire le texte de la réponse.

Vous pouvez également tester window.navigator.online (onLine?) Pour vérifier si vous êtes hors ligne (car le code d'état 0 ne doit apparaître que lorsque vous êtes hors ligne).

+0

Voir ma réponse ci-dessus - s'avère que jQuery faisait un POST. – edoloughlin

Questions connexes