2011-01-07 2 views
10

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

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

не должен быть на ложном месте на вашей последней строке? – DOK

+0

@DOK, это будет зависеть от того, что делает его метод 'onFailure' с переданным параметром. – CaffGeek

+0

@ DOK, нет, эта функция просто берет, поддерживает ли браузер функцию funcationality navigator.geolocation. Поскольку мы включили его в оператор if, я знаю, что он поддерживается, но пользователь, возможно, отказал в доступе к использованию своего местоположения. – Brandon

ответ

4

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

2

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

Если код

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

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

+0

У меня этот код в функции document.ready. Я не верю, что это связано дважды. Я поставил предупреждение перед вызовом findNearbyLocations, и он получает только один раз каждый раз для первого и последующих кликов. – Brandon

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

+1

+1 для подтверждения, что это ошибка. Угадайте, я пойду с ответом wosis и просто перейду в флаг. Благодарю. – Brandon

0

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

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

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

$ .02

Смежные вопросы