我正在制作一个显示来自不同地点的噪音测量数据的网站。每个位置的数据都在声级计设备上捕获,然后使用基于Windows的应用程序读取。然后,应用程序将Web服务器上的数据作为.js文件上传,其中包含数组变量。此.js文件每5分钟刷新一次 我首先创建了一个javascript应用程序,显示单个测量单元的实时数据。但现在我需要在地图上显示所有位置的数据。问题是每个位置上的Windows应用程序只在另一个位置创建一个具有相同名称和相同变量的文件。我在阅读正确的数据时遇到了一些麻烦 这就是我到目前为止所做的:
function removejscssfile(filename, filetype){
var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from
var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for
var allsuspects=document.getElementsByTagName(targetelement)
for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove
if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild()
}
}
function updateData(){
var numberOfNoiseSniffers = noiseSniffers.length-1;
var j = 0;
for (i=0;i<=numberOfNoiseSniffers;i++) {
file = '../'+ noiseSniffers[i] + "/" + "CurrentMeasurement.js";
$.include(file,function(){
laeq[j] = currentMeas[1][1];
lastUpdate[j] = currentMeas[0][1];
if (j==numberOfNoiseSniffers){
updateMarkers();
}
removejscssfile(file[0], "js");
j++;
});
}
t=setTimeout(function() { updateData() }, 300000);
}
$(function (){
map = new google.maps.Map(document.getElementById("gMap"), myOptions);
//noiseSniffers is an array where I have save all the folder names of different measurement locations
var numberOfNoiseSniffers = noiseSniffers.length-1;
var j = 0;
for (i=0;i<=numberOfNoiseSniffers;i++) {
var file = '../'+ noiseSniffers[i] + "/" + "CurrentMeasurement.js";
//I am using include plugin for jquery to include files because it has a callback for when a file is actually loaded
$.include(file,function(){
//a set of global arrays that keep the data from the loaded file and this data is then displayed in google maps markers
laeq[j] = currentMeas[1][1];
lastUpdate[j] = currentMeas[0][2];
latitude[j] = systemstats[12][5];
longitude[j] = systemstats[11][6];
//checking to see if I am in the process of including the last file
if (j==numberOfNoiseSniffers){
//a function that creates google maps markers
createMarkers();
}
//after that I remove the files that were just included and read
removejscssfile(file, "js");
j++;
});
}
setTimeout(function() { updateData() }, 300000);
});
我在这里删除了我的.js文件的功能:Dynamically removing an external JavaScript or CSS file
这是用于加载.js文件的jquery插件:Include File On Demand
初始加载通常有效(有时会发生只加载一个或没有标记。但更新功能主要为两个位置返回相同的数据。
所以我想知道的是,我怎样才能首先使我的代码工作以及如何优化它。我只发布了javascript代码的主要部分,但如果需要,我可以提供所有代码。谢谢你的帮助。
答案 0 :(得分:1)
我认为你需要某种类似JSONP的解决方案。
基本上在服务器端加载数据,然后将其包装在方法调用中,然后再将其返回给客户端。您的回答应如下所示:
var location_data = [1,2,3,4]
updateLocation('location_id', location_data)
现在,在客户端脚本中定义updateLocation()函数。现在,每次需要新数据时,都会创建新的'script'标记,其中src指向服务器端。加载响应后,将使用正确的参数调用updateLocation()。
我希望这很清楚
答案 1 :(得分:0)
您可以尝试某种形式的namespacing
答案 2 :(得分:0)
我完全不明白你的问题,但你可以试试这个
//将您的代码置于匿名函数中并立即执行
(function(){
//your javascript codes
//create variable with same names here
//
})();