С помощью следующего кода будет отправлен статус ERROR
. Когда я положил commandButton
вне формы ИЛИ положил еще alert()
в конце geocode()
статус OK
будет предупрежден.
Что здесь происходит?Как объяснить это поведение JSF и Javascript?
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<script src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script>
<script>
var geocoder;
geocoder = new google.maps.Geocoder();
function geocode() {
geocoder.geocode({'address' : 'china'},geocoderCallback);
}
function geocoderCallback(results, status) {
alert(status);
};
</script>
</h:head>
<h:body>
<h:form>
<h:commandButton onclick="geocode()" value="geocode" />
</h:form>
</h:body>
</html>
Благодарим вас за полезный ответ. Теперь он работает и даже начинает иметь больше смысла, но я до сих пор не понимаю: как эта часть после перезагрузки страницы работает? Я бы предположил, что только «никто» больше не слушает ответ от сервера геокодирования. Я также думаю, что статус «ОШИБКА» означает, что с некоторым запросом что-то не так. Но сам запрос должен быть прекрасен. – Lester
Геокодер работает, по-видимому, асинхронно. Поэтому, как только он запускается и выполняется в другом потоке, текущий поток немедленно возвращается к продолжению кнопки 'onclick' поведения синхронного представления формы. Этот шаг, в свою очередь, прерывает все запущенные асинхронные вызовы на текущей странице. Затем вызов геокодера приводит к ошибке. – BalusC
Итак, статус «ОШИБКА» происходит не от сервера геокодирования, а от сценария, загруженного на мой клиент? – Lester