Почему этот JavaScript вызывается дважды? - PullRequest
10 голосов
/ 07 января 2011

У меня есть кнопка, где я подключил 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 ]

4 голосов
/ 07 января 2011

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

2 голосов
/ 07 января 2011

Я столкнулся с той же проблемой, похоже, это ошибка браузера (протестировано в 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

2 голосов
/ 07 января 2011

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

Если код

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

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

0 голосов
/ 15 мая 2017

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

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

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

$. 02

...