ReferenceError:Firefox中的函数parseXml未定义

时间:2013-07-04 14:53:25

标签: javascript jquery firefox jquery-mobile undefined-reference

即使parseXml 已定义,我也会收到这个奇怪的错误。这段代码适用于fine in Chrome但不在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行的 if(navigator.geolocation)检查条件,那么它在Firefox中也能正常工作,并且也没有这样的未定义ReferenceError

此外,如果我在parseXml函数中带来 if(navigator.geolocation)检查条件,则代码可以正常工作。想知道Firefox中导致问题的原因。

2 个答案:

答案 0 :(得分: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));
 });
}

答案 1 :(得分:0)

问题可能是Firefox与条件状态中的函数声明略有不同。 documentation说:

  

注意:虽然这种功能看起来像一个功能   声明,它实际上是一个表达式(或声明),因为它是   嵌套在另一个语句中。看功能之间的差异   声明和函数表达式。

因此,如果它是一个表达式,那么当ajax调用尝试使用它时,函数尚未定义。

要修复它,请更改声明的顺序或在外部声明该函数。


这也包含在question中。