我有一个按钮,我将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>
答案 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