Javascript ReferenceError:Firefox中未定义函数parseXml
即使定义了Javascript ReferenceError:Firefox中未定义函数parseXml,javascript,jquery,firefox,jquery-mobile,undefined-reference,Javascript,Jquery,Firefox,Jquery Mobile,Undefined Reference,即使定义了parseXml,我也会遇到这个奇怪的错误。这段代码在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
parseXml
,我也会遇到这个奇怪的错误。这段代码在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中也可以正常工作,并且也没有此类未定义的引用错误
另外,如果我在parseXml
函数中带上这个if(navigator.geolocation)检查条件,代码工作正常。想知道是什么原因导致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) {
$.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));
});
}
问题可能是Firefox在条件语句中处理函数声明时有点不同。报告说:
注意:虽然这种函数看起来像一个函数
声明,它实际上是一个表达式(或语句),因为它是
嵌套在另一个语句中。请参见函数之间的差异
声明和函数表达式
因此,如果它是一个表达式,那么当ajax
调用尝试使用它时,函数还没有定义
若要修复它,请更改声明的顺序或在外部声明函数
本节也介绍了这一点。错误是什么?在哪一行?如果我点击F12并输入警报(navigator.geolocation)在Fx20X中,我得到了一个地理位置对象。在if
或ajax调用之前,您是否尝试定义parseXml
函数?如果将parseXml带到所有函数之外会发生什么情况?@Suyesh这就是JonathanNaguin提出的观点。定义它之前。是的,它工作得很好+1用于引入var站=[]代码>也在parseXml
函数中<代码>乔纳森·纳金
在评论中首先回答了这个问题。所以我会接受他的回答。谢谢……)