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