为什么这个javascript会被调用两次?

时间:2011-01-07 15:54:01

标签: javascript jquery geolocation

我有一个按钮,我将onclick挂钩到一个调用来检索用户位置,然后使用该位置再次调用以检索附近位置的列表。由于某种原因,在第二次单击按钮时会调用地理定位成功方法两次。

所以我加载页面,点击按钮,允许使用我的位置,它会发出一个ajax请求来获取附近的位置。这很好。

我再次单击该按钮,允许使用我的位置(再次),它将发出一个ajax请求来获取位置,等待~2秒,然后使用相同的坐标发出另一个请求,而不允许我。因此,成功方法必须被调用两次,但我不确定原因。

$("#FindLocation").click(function () {
  myScript.findNearbyLocations(displayData, displayError);
});

这个点击功能没有被调用两次,我已经注释掉了displayData和displayError中的所有代码。

findNearbyLocations: function (onSuccess, onFailure) {
  if (navigator.geolocation) {
    browserSupportFlag = true;
    navigator.geolocation.getCurrentPosition(function (position) {
      alert('This is getting called twice except on the initial call.');
      myScript.findStores(position.coords.latitude, position.coords.longitude, onSuccess, onFailure);
    }, function () {
      onFailure(true);
    });
  }
}

任何人都知道我哪里出错了?

编辑:我不认为标记是问题所在。我只使用基本网页进行测试。目前没有造型或其他元素。

<form id="form1" runat="server">
  <div>      
    <MyControls:Search ID="Search" runat="server" />
  </div>
</form>

和用户控件(以及所有必要的javascript包括)

<script type="text/javascript">
  $(document).ready(function () {
    $("#FindLocation").click(function () {
      myScript.findNearbyLocations(displayData, displayError);
    });
  });
</script>

<input type="button" id="FindLocation" value="Find Location" />
<div id="results">
</div>

4 个答案:

答案 0 :(得分:4)

可能是您正在使用的任何客户的getCurrentPosition中的错误。 在这种情况下,您可以在调用success方法时设置一个标志,并且不允许第二次调用findStores函数。

答案 1 :(得分:2)

每当我发现这种情况发生时,都是因为我不小心将事件绑定到控件两次。

如果代码

$("#FindLocation").click(function () {
  myScript.findNearbyLocations(displayData, displayError);
});

恰好运行两次,你将绑定两个相同的点击事件,并且动作将发生两次。

答案 2 :(得分:2)

我遇到了同样的问题,它似乎是一个浏览器错误(在Firefox和Safari中测试过)。我只是验证了我是否已经在最近的时间范围内检索到相同的数据,类似于此处的回答:navigator.geolocation.getCurrentPosition sometimes works sometimes doesn't

Google提出更多问题,但没有明确答案:http://www.google.nl/search?q=geolocation.getCurrentPosition+called+twice&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

答案 3 :(得分:0)

这种情况正在发生,它以可预测的频率发生;我现在正在处理的应用程序中发现的是,当一个错误被引发并且没有被捕获时,某个匿名函数中某处出现以终止当前的Javascript会话,当它开始发生时。令人沮丧和烦恼;我知道为什么它正在发生,但我不知道 它在哪里发生......但是。

但它,所以只需快速评论即将发生的所有&#34;&#34;答案并非准确或有用。

无论如何,那是我的答案;你可能有一些内部功能抛出了JQuery正在悄悄吃东西的错误。

$ 02