2011-07-04 54 views
0

我正在制作一个网站,显示来自不同位置的噪声测量数据。每个位置的数据都在声级计设备上捕获,然后通过基于Windows的应用程序读取。应用程序然后将数据上载到Web服务器上,作为一个带有数组变量的.js文件。这个.js文件每5分钟刷新一次。
我首先创建了一个javascript应用程序,它显示单个测量单元的实时数据。但现在我需要在地图上显示所有位置的数据。问题在于,每个位置上的Windows应用程序仅在另一个位置创建一个具有相同名称和相同变量的文件。我在阅读正确的数据时遇到了一些麻烦。
这是我做过什么,到目前为止:不同的外部.js文件具有相同的变量名称

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代码的主要部分,但我可以提供所有的代码,如果它是需要的。感谢您的帮助。

回答

1

我认为你需要某种JSONP样的解决方案。

基本上在服务器端加载数据,然后将其包装在方法调用中,然后将其返回到客户端。你的反应应该是这个样子:

var location_data = [1,2,3,4] 
updateLocation('location_id', location_data) 

现在,你在你的客户端脚本定义更新位置()函数。现在,每次你需要新的数据时,你都会创建一个新的'脚本'标签,其中src指向你的服务器端。当加载响应时,将使用正确的参数调用updateLocation()。

我希望这已经足够清楚了

+0

这可能是最好的方法来做到这一点...但我的局限性是,运行此服务器的服务器不一定具有服务器端脚本。所以我只限于JavaScript。
所以我现在所做的是...我从一个测量点替换外部js文件,然后在5秒后从第二个测量点替换文件等等。所以从来没有发生过从一个测量点的文件覆盖另一个点的文件。它的作用就像魅力一样...... –

0

你也许可以尝试一些形式的namespacing

+0

这可能有效,但我没有固定数量的测量位置。你可能有一个想法如何克服? –

0

我完全不知道你的问题,但你可以试试这个

//把你的c颂匿名函数里面并立即执行

(function(){ 

    //your javascript codes 
    //create variable with same names here 
    // 

})(); 
相关问题