0

即使當parseXml定義爲時,我也會收到此奇怪錯誤。該代碼的作品fine in Chrome但不在FirefoxReferenceError:function parseXml在Firefox中未定義

$(document).on("pageinit", "#map-page", function() { 
     var defaultLatLng = new google.maps.LatLng(56.8517843, 14.828458); // Default somewhere to Växjö when no geolocation support 
     if (navigator.geolocation) { 
      var stations = []; 
      $.ajax({ 
       type: "GET", 
       url: "busstations.xml", 
       dataType: "xml", 
       success: parseXml 
      }); 

      function parseXml(xml) { 
       $(xml).find('station').each(function() { 
        var name = $(this).find("name").text(); 
        var localurl = $(this).find("localurl").text(); 
        var latitude = $(this).find("latitude").text(); 
        var longitude = $(this).find("longitude").text(); 
        navigator.geolocation.getCurrentPosition(success, fail, { 
         maximumAge: 500000, 
         enableHighAccuracy: true, 
         timeout: 6000 
        }); 

        function success(pos) { 
         currentLatitude = pos.coords.latitude; 
         currentLongitude = pos.coords.longitude; 
         console.log(pos.coords.latitude + " " + pos.coords.longitude); 

        } 

        function fail(error) { 
         alert("No GL support!"); 
        } 

        stations.push({ 
         "name": name, 
         "localurl": localurl 
        }); 
        console.log(JSON.stringify(stations)); 


       }); 
      } 
     } 
    }); 

但是,如果我刪除3號線的如果(navigator.geolocation)檢查條件,那麼它也在Firefox工作正常,也沒有這樣的不確定ReferenceError

另外,如果我把parseXml功能這裏面如果(navigator.geolocation)校驗條件,代碼工作正常。不知道是什麼導致Firefox的問題。

+0

什麼是錯誤和哪一行? – akonsu

+0

如果我打F12並在Fx20X中輸入alert(navigator.geolocation),我得到一個地理定位對象 – mplungjan

+0

我改變了標題......它顯然說:ReferenceError:parseXml沒有定義 成功:parseXml – SASM

回答

0

問題可能在於Firefox與條件語句中的函數聲明有些不同。該documentation說:

Note: Although this kind of function looks like a function declaration, it is actually an expression (or statement), since it is nested within another statement. See differences between function declarations and function expressions.

所以,如果它是一個表達式,然後當ajax呼叫嘗試使用它的功能尚未確定。

修復它可以改變聲明的順序或聲明外部函數。


這也包括在本question

1

這是可以接受的嗎?

$(document).on("pageinit", "#map-page", function() { 
    var defaultLatLng = new google.maps.LatLng(56.8517843, 14.828458); // Default somewhere to Växjö when no geolocation support 
    if (navigator.geolocation) { 
     $.ajax({ 
      type: "GET", 
      url: "busstations.xml", 
      dataType: "xml", 
      success: parseXml 
     }); 
    } 
}); 


function parseXml(xml) { 
    var stations = []; 
    $(xml).find('station').each(function() { 
    var name = $(this).find("name").text(); 
    var localurl = $(this).find("localurl").text(); 
    var latitude = $(this).find("latitude").text(); 
    var longitude = $(this).find("longitude").text(); 
    navigator.geolocation.getCurrentPosition(
    function(pos) { 
     currentLatitude = pos.coords.latitude; 
     currentLongitude = pos.coords.longitude; 
     console.log(pos.coords.latitude + " " + pos.coords.longitude); 
    }, 
    function(error) { 
     alert("No GL support!"); 
    }, 
    { 
     maximumAge: 500000, 
     enableHighAccuracy: true, 
     timeout: 6000 
    } 
    ); 
    stations.push({ 
    "name": name, 
    "localurl": localurl 
    }); 
    console.log(JSON.stringify(stations)); 
}); 
} 
+0

是的,這是完美的工作。在'parseXml'函數中也帶上'var stations = [];'+1。 Jonathan Naguin在評論中首先回答了這個問題。所以我會接受他的回答。謝謝.. :) – SASM

+0

當我爲你編輯你的代碼時,是的... – mplungjan