Почему этот javascript вызывается дважды?

У меня есть кнопка, где я подключил onclick к вызову, чтобы получить местоположение пользователя, а затем использовать его, чтобы сделать другой вызов, чтобы получить список ближайших местоположений. По какой-то причине метод успешной геолокации вызывается дважды при втором нажатии кнопки.

Итак, я загружаю страницу, нажимаю кнопку, разрешаю использовать мое местоположение, и он сделает один запрос 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)

<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>

Ответ 1

Может быть ошибка в getCurrentPosition любого клиента, который вы используете. В этом случае вы можете просто установить флаг при вызове метода success и не позволять функции findStores вызываться во второй раз.

Ответ 2

Всякий раз, когда я это обнаружил, это потому, что я случайно связал событие с элементом управления дважды.

Если код

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

выполняется дважды, у вас будет два одинаковых события кликов, и действие произойдет дважды.

Ответ 3

Я столкнулся с той же проблемой, это, похоже, ошибка браузера (протестирована в Firefox и Safari). Я просто подтвердил, что я уже получил одни и те же данные за последние временные рамки, похожие на то, что здесь на это отвечает: navigator.geolocation.getCurrentPosition иногда иногда работает

Больше вопросов в 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

Ответ 4

Это происходит, и это происходит с предсказуемой частотой; то, что я нашел в приложении, над которым я сейчас работаю, заключается в том, что когда ошибка возникает и не поймается, где-то в какой-то анонимной функции, которая, как представляется, завершает текущие сеансы Javascript, когда она начинает происходить. Это расстраивает и раздражает; Я знаю, почему это происходит, но я не знаю, где это происходит... пока.

Но это так, так что просто быстрый комментарий о том, что все ответы "не могут произойти" не являются ужасно точными или полезными.

Во всяком случае, мой ответ; у вас может быть некоторая внутренняя функция, бросающая ошибку, которую JQuery тихо ест или что-то в этом роде.

$. 02