0
使用以下代碼提醒狀態ERROR
。當我把commandButton
置於表格的外部或者在geocode()
的末尾放置另一個alert()
時,狀態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>
感謝您的幫助。現在它起作用了,甚至開始變得更有意義了,但我仍然沒有真正明白它:頁面重新加載之後這部分是如何工作的?我本來以爲只有「沒有人」會收聽來自地理編碼服務器的響應。我也認爲'ERROR'狀態意味着某些請求出了問題。但請求本身應該沒問題。 – Lester
Geocoder顯然是異步運行的。因此,一旦它被觸發並在另一個線程中執行,那麼當前線程立即返回以繼續按鈕的同步提交表單的「onclick」行爲。這一步反過來中止當前頁面上所有正在運行的異步調用。地理編碼調用會導致錯誤。 – BalusC
因此'ERROR'的狀態不是來自地理編碼服務器,而是來自加載到我的客戶端的腳本? – Lester