gpt4 book ai didi

函数外的 Javascript 导致未捕获的引用异常

转载 作者:行者123 更新时间:2023-11-30 18:16:08 24 4
gpt4 key购买 nike

我正在尝试在我的 MVC 4 网页上实现一些基于位置的服务功能。我完全不熟悉使用 Javascript 和 MVC,所以请多多包涵。

这是我当前的网页:

@{
ViewBag.Title = "OnlineUsers";
}


<html>
<head>
<title>Online Users</title>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.4/leaflet.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.4/leaflet.js"></script>

</head>
<body>
<button onclick="showMap()">Show Map</button>
<button onclick="goToLocation()">My Location</button>
<div id="locationDetails"></div>
<div id="map" style="height: 500px; width: 800px"></div>

<script type="text/javascript">
**var map = L.map('map');**
function showMap() {

var map = L.map('map');
L.tileLayer('http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>'
}).addTo(map);

map.locate({ setView: true, maxZoom: 16 });
}

</script>
</body>
</html>

脚本部分的顶部是以下代码:var map = L.map('map');。如果我将这段代码包含在一个函数中,页面就会加载并调用该函数来创建 map 。但是,如果我将这段代码(或任何其他 JS 代码)放在函数之外,页面就不会加载。

我使用了 Chrome 的调试器,控制台显示了以下错误:

Uncaught ReferenceError: L is not defined 

我在任何地方都没有看到“L”的定义,但是为什么从函数内部调用时它会起作用?

最佳答案

它在您的函数中起作用,因为 L 是 leaflet 的一部分,它不会在您的函数被调用时加载,但不会在页面加载时加载。 L 是其他事物的缩小表示。

通常会等到文档准备好,这样您就可以确定您引用的 js 已经加载,例如如果你有 jQuery 那么下面的

$(document).ready(function () {
var map = L.map('map');
}

更新:加载此 js 可能会很慢,因此您可以先检查它是否存在,例如

window.setTimeout(initMap, 100); 

function initMap(){
//this should check if your leaflet is available or wait if not.
if(typeof L=== "undefined"){
window.setTimeout(initMap, 100);
return;
}
var map = L.map('map');
};

关于函数外的 Javascript 导致未捕获的引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com