2010-07-16 4 views
0

J'ai ce code, et pour une raison quelconque, ma fonction $ .post se déclenche deux fois de suite (pour 'journal/météo') selon Firebug. Il le fait quand je supprime le "if (navigator.geolocation)", cependant, si je remplace le bloc $ .post par quelque chose comme console.log ('test'), il ne se déclenche qu'une fois. Ce qui est encore plus bizarre, c'est quand je place console.log ('test') avant la fonction $ .post, alors mon événement ne se déclenche qu'une seule fois. Je suppose que quelque chose se passe bizarre avec jQuery. Quelqu'un a des idées?

if (navigator.geolocation) 
    { 
    navigator.geolocation.getCurrentPosition(function(position) 
     { 
     $.post('journal/weather', {latitude: position.coords.latitude, longitude: position.coords.longitude}, function(result) 
      { 
      if (typeof(result.current.temp) != 'undefined') 
       { 
       global.temperature = parseInt(result.current.temp, 10); 
       global.temperature_slider.slider('value', global.temperature); 
       } 
      }, "json"); 
     }); 
    } 

EDIT: Ok, plus étrange encore, parfois il se déclenche deux fois, parfois une fois. Comment le même morceau de code peut-il donner des résultats différents chaque fois qu'il est exécuté? Après quelques expérimentations, je pense que c'est un bug dans Firefox. Pourquoi? Parce que cela n'arrive pas seulement avec ma page, mais avec les autres. Si je continue d'actualiser ma page, à peu près les 10 premières fois le navigateur.geolocation.getCurrentPosition déclenche la fonction de rappel. Cependant, à un moment donné, il cesse de le faire. Et une fois qu'il atteint ce point, il ne fonctionne pas pour tout autre site Web qui utilise getCurrentPosition. Et ce problème n'arrive jamais sur Chrome ou même IE. Recherche Google, je trouve ceci:

http://groups.google.com/group/mozilla.feedback.firefox/browse_thread/thread/fecc3fb0bad6d0b8

+0

Cela peut être utile si vous avez indiqué comment ce bloc de code était appelé. Et le problème peut être dans votre utilisation de 'getCurrerentPosition' vérifier cet article http://stackoverflow.com/questions/2707191/unable-to-cope-with-the-asynchronous-nature-of-navigator-geolocation. – qw3n

+0

Je crois que j'utilise getCurrentPosition correctement ... au moins en fonction des réponses dans le lien que vous avez fourni. Cependant, obtenez ceci. J'ai mis ce code dans la ligne de commande Firebug sur une page Web aléatoire (n'importe quelle page Web): navigator.geolocation.getCurrentPosition (function() {alert ('Position obtenue');}); Rien ne se passe pendant 40 secondes, puis mon message apparaît. Et j'ai juste essayé Chrome et je ne reçois pas ce problème du tout. – Nick

Répondre

0

Il semble que le code peut être être appelé avant que la page est terminée chargement - donc console.log peut-être pas encore en cours d'initialisation.

Votre code de code est-il enveloppé dans un document.ready quelconque, par ex.

$ (function() { if (navigator.geolocation) { ...} });

Juste une supposition. Aurait besoin d'en savoir plus sur le contexte dans lequel le code semble avoir un meilleur coup de poignard.

Espérons que cela aide et bonne chance.

+0

Le code fait partie d'une file de fonctions, et est appelé une fois (en fait un peu après) le document est prêt. – Nick