2010-07-16 79 views
0

我有这个代码,并且出于某种原因,我的$ .post函数根据Firebug快速连续两次(用于'journal/weather')激发。当我删除“if(navigator.geolocation)”时仍然会这样做,但是,如果我用console.log('test')替换$ .post块,它只会触发一次。

什么更奇怪的是当我把$ .post函数放在console.log('test')时,那么我的事件也只会触发一次。我假设有什么奇怪的事情与jQuery。任何人有任何想法?

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"); 
     }); 
    } 

编辑:好了,奇怪的是,有时它触发两次,有时一次。同一段代码如何在每次执行时给出不同的结果?

编辑2:经过一番实验,我认为这是Firefox的一个bug。为什么?因为它不仅发生在我的页面上,还发生在其他页面上。如果我不断刷新我的页面,大约是navigator.geolocation.getCurrentPosition的前10次将触发回调函数。然而,在某一点上,它退出了这一过程。一旦达到这一点,它不适用于任何其他使用getCurrentPosition的网站。而这个问题在Chrome甚至IE上都不会发生。搜索谷歌,我发现这一点:

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

+0

如果你告诉如何调用这个代码块,它可能会有所帮助。并且这个问题可能在你使用'getCurrerentPosition'检查这篇文章http://stackoverflow.com/questions/2707191/unable-to-cope-with-the-asynchronous-nature-of-navigator-geolocation。 – qw3n 2010-07-16 18:29:41

+0

我相信我正确使用getCurrentPosition ..至少根据您提供的链接中的答案。 但是,得到这个。我把这段代码放到随机网页(任何网页)上的Firebug命令行中: navigator.geolocation.getCurrentPosition(function(){alert('Position obtain');}); 像40秒没有任何反应,然后我的信息出现。而我只是试过Chrome,我根本没有得到这个问题。 – Nick 2010-07-16 18:37:53

回答

0

这听起来像代码可以在页面加载完成之前被称为 - 因此console.log也许还没有被初始化。

您的代码是否包装在某种document.ready中,例如:

$(函数(){ 如果(navigator.geolocation){ ... } });

只是一个猜测。需要更多地了解代码似乎更好地刺穿它的上下文。

希望有所帮助,祝你好运。

+0

该代码是函数队列的一部分,并且在文档准备好后调用一次(实际上相当多)。 – Nick 2010-07-16 18:28:37