Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个javascript会被调用两次?_Javascript_Jquery_Geolocation - Fatal编程技术网

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

为什么这个javascript会被调用两次?,javascript,jquery,geolocation,Javascript,Jquery,Geolocation,我有一个按钮,我将onclick连接到一个调用以检索用户位置,然后使用该位置再次调用以检索附近位置的列表。出于某种原因,第二次单击按钮时,geolocation success方法将被调用两次 因此,我加载页面,单击按钮,允许使用我的位置,它将发出一个ajax请求以获取附近的位置。这个很好用 我再次单击按钮,允许使用我的位置(再次),它将发出一个ajax请求以获取位置,等待~2秒,然后在我不允许的情况下使用相同的坐标发出另一个请求。因此,成功方法必须被调用两次,但我不知道为什么 $("#Find

我有一个按钮,我将onclick连接到一个调用以检索用户位置,然后使用该位置再次调用以检索附近位置的列表。出于某种原因,第二次单击按钮时,geolocation success方法将被调用两次

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

我再次单击按钮,允许使用我的位置(再次),它将发出一个ajax请求以获取位置,等待~2秒,然后在我不允许的情况下使用相同的坐标发出另一个请求。因此,成功方法必须被调用两次,但我不知道为什么

$("#FindLocation").click(function () {
  myScript.findNearbyLocations(displayData, displayError);
});
这个click函数没有被调用两次,我已经注释掉了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)


$(文档).ready(函数(){
$(“#查找位置”)。单击(函数(){
myScript.findNearbyLocations(displayData,displayError);
});
});

每当我发现发生这种情况时,都是因为我意外地将事件绑定到控件两次

如果代码

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

如果碰巧运行两次,您将绑定两个相同的单击事件,并且该操作将发生两次。

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

我面临同样的问题,这似乎是一个浏览器错误(在Firefox和Safari中测试)。我只是验证了我是否已经在最近的时间段内检索到了相同的数据,类似于这里的回答:


谷歌有更多的问题,但没有明确的答案:

这正在发生,而且发生的频率可以预测;我在目前正在开发的一个应用程序中发现,当出现错误且未被捕获时,在某个匿名函数中的某个地方,该函数似乎会终止当前的Javascript会话,这时错误就开始发生了。这是令人沮丧和恼人的;我知道为什么会这样,但我不知道发生在哪里。。。然而

但事实确实如此,因此,只要一个简短的评论,所有“不可能发生”的答案都不是非常准确或有用

不管怎样,这就是我的答案;您可能有一些内部函数抛出JQuery正在悄悄地处理的错误或其他错误


$.02

在您的最后一行中,onFailure不应该为false吗?@DOK,这将取决于他的
onFailure
方法对传递给它的参数所做的操作。@DOK,不,该函数只考虑浏览器是否支持navigator.geolocation函数。由于我们在if语句中添加了它,我知道它是受支持的,但是用户可能拒绝访问他们的位置。您是否可能无意中在页面上添加了两个元素
id='FindLocation'
?不应该允许它有一个重复的ID,但是JQuery会处理它并为每个ID运行事件。@Spudley,恐怕不行。这是一个空网页,带有基本的html/头/体标记和一个用户控件。没有其他因素。用户控件只包含一个按钮和一个用于转储结果的div。我相信它不会被捆绑两次。我在findNearbyLocations调用之前放置了一个警报,每次第一次和随后的单击都只调用一次。+1用于确认它是一个bug。我想我会同意wosis的回答,只是插一面旗子。谢谢
$("#FindLocation").click(function () {
  myScript.findNearbyLocations(displayData, displayError);
});