gpt4 book ai didi

javascript - 建议克服 Javascript 提升

转载 作者:行者123 更新时间:2023-12-02 16:44:59 25 4
gpt4 key购买 nike

我想我的 javascript 代码受到了提升效应的影响,我想解决这个问题。

我正在通过 SOAP 获取想要在热图上可视化的数据,这些数据存储在“ajax”代码块内的全局变量 heatMapData 中,然后应该对它们进行赋值到 google.maps.visualization.HeatmapLayer 构造函数。不幸的是,当调用此构造函数时,变量 heatMapData 为空,尽管它已使用指令 heatMapData.push({location: new google ...) 正确初始化,但我用 firebug 检查了它。 。可能会发生这种情况,因为该变量被提升了。ajax 代码返回后如何保留 heatMapData 中的值?先感谢您。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<title>Energy Heatmap </title>
<style>
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map-canvas { height: 80% }
h1 { position:absolute; }
</style>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=visualization&sensor=true?key=AIzaSyCzoFE1ddY9Ofv0jjOvA3yYdgzV4JvCNl4"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<h1>Energy Heatmap </h1>
<div id="map-canvas"></div>

<script>
var heatMapData = new Array();
function loadHeatMapData()
{
$.ajax
({
type: "GET",
url: "http://localhost:8080/EnergyManagement-portlet/api/secure/jsonws/sample/get-samples-time-by-name?energyName=EnAssTCU",
dataType: "jsonp",
crossDomain: true,
cache: false,
success: function(jsonData)
{

for (var i = 0; i < jsonData.length; i++)
{
var decodedData = JSON.parse(jsonData[i]);
var lng = decodedData["_longitude"];
var lat = decodedData["_latitude"];
var energyIntensity = decodedData["_value"];
//Here I add values to heatMapData
heatMapData.push({location: new google.maps.LatLng(lat, lng), weight: energyIntensity});
}
}
})
}

// map center
var myLatlng = new google.maps.LatLng(40.8333333, 14.25);
// map options,
var myOptions = {
zoom: 5,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
// standard map
map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
loadHeatMapData();
var heatMap = new google.maps.visualization.HeatmapLayer({
data: heatMapData //heatMapData is empty
});

heatMap.setMap(map);

var vehiclePath = [
new google.maps.LatLng(40.85235, 14.26813),
new google.maps.LatLng(40.85236, 14.26822),
new google.maps.LatLng(40.85236, 14.26822),
new google.maps.LatLng(40.85236, 14.26816),
new google.maps.LatLng(40.85258, 14.26811),
new google.maps.LatLng(40.85364, 14.26793),
new google.maps.LatLng(40.85414, 14.26778),
new google.maps.LatLng(40.8554, 14.2676),
new google.maps.LatLng(40.8579, 14.27286),
new google.maps.LatLng(40.85821, 14.27291),
new google.maps.LatLng(40.8584, 14.27302),
new google.maps.LatLng(40.85859, 14.27325),
new google.maps.LatLng(40.8587, 14.27421),
new google.maps.LatLng(40.85865, 14.27433),
new google.maps.LatLng(40.85866, 14.27446),
new google.maps.LatLng(40.86656, 14.291),
new google.maps.LatLng(40.86653, 14.29102)

];

var path = new google.maps.Polyline({
path: vehiclePath,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});

path.setMap(map);


</script>
<p id="demo"></p>
</body>
</html>

最佳答案

您遇到的问题与提升无关,而与时机有关。

$.ajax 调用启动从服务器加载数据的过程,但在该请求未完成时您的代码将继续运行。这就是 ajax 有回调的原因 - 这样您就可以在数据返回时对数据进行操作,因为数据不会立即可用。

因此,在 ajax 成功回调完成之前,您无法使用 heatMapData。将您想要使用它的代码移动到您从该回调调用的函数中。

关于javascript - 建议克服 Javascript 提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27176138/

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