2011-07-04 15 views
0

私は異なる場所からのノイズ測定データを表示するウェブサイトを作っています。各場所のデータは、騒音レベルメーターデバイスに取り込まれ、Windowsベースのアプリケーションで読み取られます。アプリケーションは、配列変数を含む.jsファイルとしてWebサーバーにデータをアップロードします。この.jsファイルは5分ごとに更新されます。
最初に、1つの測定単位のライブデータを表示する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です。
通常、初期ロードは機能します(マーカーが1つしかロードされない場合や、ロードされない場合があります)。
私が知りたいことは、まずコードを作成する方法です作業とどのようにそれを最適化するために。私はjavascriptのコードのちょうど主要部分を掲示したが、それが必要な場合は、私はすべてのコードを提供することができます。任意の助けをありがとう。

答えて

1

を実行するには、私はあなたがJSONP様ソリューションのいくつかの並べ替えが必要だと思います。

基本的にサーバー側にデータをロードし、メソッド呼び出しでラップしてからクライアント側に返します。あなたの応答は次のようになります。

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

クライアント側スクリプトでupdateLocation()関数を定義しました。新しいデータが必要になるたびに、サーバーサイドを指すsrcという新しい 'script'タグを作成します。レスポンスがロードされると、正しいパラメータでupdateLocation()が呼び出されます。

これは十分明確です。

+0

これはおそらくこれを実行する最善の方法です...しかし、私の制限は、これを実行するサーバーが必ずしもサーバー側のスクリプトを持っているとは限りません。だから私はjavascriptに限られている。
私は今、何をしましたか...私は1つの測定点から外部jsファイルを置き換え、次に5秒後に2番目の測定点からファイルを置き換えます。したがって、ある測定ポイントのファイルが別のポイントのファイルを上書きすることはありません。そしてそれは魅力のように働く... –

0

あなたは多分namespacing

+0

これはうまくいくかもしれませんが、測定位置は固定されていません。あなたは多分それを乗り越える方法を考えていますか? –

0
のいくつかのフォームを試すことができます

私はあなたの問題を正確に理解していませんが、これを試すことがあります

//あなたのc匿名関数の内部ODEと、それはすぐに

(function(){ 

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

})(); 
関連する問題