[JavaScript] Ajax / Array / Timer & For-Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [JavaScript] Ajax / Array / Timer & For-Schleife

    Guten Morgen zusammen,

    ich sitze seit gestern an einem Problem wo ich einfach nicht mehr weiter komme.

    Mein Vorhaben:
    Ich möchte mittels AJAX und einem Timer, einen Array durchlaufen der immer den Aktuellsten Wert anzeigt.

    Mein Code bisher:



    Code:
    <script type="text/javascript">
    var isUpdating = false;
    var connection = false;
    var digiwebURI = 'http://192.168.2.81/x.dwh';
    var updateInterval = 100;
    var MSIE = false;
    var timer = false;
    var infor = false;
    var pos = 0;
    var k = 0;
    var URLs = new Array();
    var VALs = new Array();
    var IDs = new Array();
    		
    if(navigator.appName == "Microsoft Internet Explorer" && !window.opera) MSIE = true;
    		
    function createAjaxHandler()
    {
    	try {
    		if(MSIE) {
    			connection = new ActiveXObject("Microsoft.XMLHTTP");
    		} else {
    			connection = new XMLHttpRequest();
    		}
    	} catch(e) {
    		return 0;
    	}
    }
    		
    function checkVar(requesturl, wert, id)
    {
    	URLs[pos] = requesturl;
    	VALs[pos] = wert;
    	IDs[pos] = id;
    	pos++;
    	document.getElementById('pos').innerHTML = pos;
    }
    		
    function proceedProcess()
    {		
    	if (!connection) createAjaxHandler();
    			
    	if (!timer) {
    		var aktiv = window.setInterval("proceedProcess()", updateInterval);
    		timer = true;
    	}
    			
    	if (isUpdating==false) {
    		isUpdating = true;
    					
    		for (i = 0; i < pos; i++) {
    			var id = IDs[i];
    			url = URLs[i] + '?V=' + VALs[i];		
    			connection.open("GET", url,true);							
    			connection.onreadystatechange = function () {
    				if(connection.readyState == 4) {
    					if(connection.status == 200) {
    
    document.getElementById(id).innerHTML = connection.responseText;
    
    document.getElementById('status').innerHTML = connection.status;
    document.getElementById('readyState').innerHTML = connection.readyState;
    
    					}	
    				}
    			};
    			document.getElementById('curarr').innerHTML = i;
    			connection.send(null);
    		}	
    		isUpdating = false;			
    	}
    		
    	document.getElementById('curarr').innerHTML = i;
    }
    </script>

    Aufrufen möchte ich das ganze mit:

    Code:
    <script type="text/javascript">
    	checkVar(digiwebURI, '%23%23000187', 'timer');
    	checkVar(digiwebURI, '%23%23000171', 'timestamp');
    	proceedProcess();
    </script>
    Sobald ich 2 Werte Abrufe, funktioniert nichts mehr.

    Der Firefox Javascript-Debugger brüllt sowas wie:

    Code:
    Fehler: uncaught exception: Die Erlaubnis für den Aufruf der Methode XMLHttpRequest.open wurde verweigert

    Kann mir wer weiterhelfen ?

  • #2
    Du musst auch für jede Abfrage ein neues XMLHttpRequest Objekt erzeugen.
    hopka.net!

    Kommentar


    • #3
      Super, Danke!

      Schonmal ein Schritt weiter, er aktuallisiert nun immer der letzte Wert der via checkVar(); eingespeist wurde.

      Quelltext bisher:

      Code:
      <script type="text/javascript">
      var isUpdating = false;
      var connection = false;
      var digiwebURI = 'http://127.0.0.1/x.dwh';
      var updateInterval = 100;
      var MSIE = false;
      var timer = false;
      var infor = false;
      var pos = 0;
      var URLs = new Array();
      var VALs = new Array();
      var IDs = new Array();
      		
      if(navigator.appName == "Microsoft Internet Explorer" && !window.opera) MSIE = true;
      		
      		
      function checkVar(requesturl, wert, id)
      {
      	URLs[pos] = requesturl;
      	VALs[pos] = wert;
      	IDs[pos] = id;
      	pos++;
      }
      		
      function proceedProcess()
      {			
      	if (!timer) {
      		var aktiv = window.setInterval("proceedProcess()", updateInterval);
      		timer = true;
      	}
      		
      	if (isUpdating==false) {
      		isUpdating = true;
      			
      		for (i = 0; i < pos; i++) {
      			try {
      				if(MSIE) {
      					var connection = new ActiveXObject("Microsoft.XMLHTTP");
      				} else {
      					var connection = new XMLHttpRequest();
      				}
      			} catch(e) {
      				return 0;
      			}
      			var id = IDs[i];
      			url = URLs[i] + '?V=' + VALs[i];
      			connection.open("GET", url,true);
      			connection.onreadystatechange = function () {
      				if(connection.readyState == 4) {
      					if(connection.status == 200) {
      
      document.getElementById(id).innerHTML = connection.responseText;
      document.getElementById('status').innerHTML = connection.status;
      document.getElementById('readyState').innerHTML = connection.readyState;
      
      					}	
      				}
      			};
      			document.getElementById('curarr').innerHTML = i;
      			connection.send(null);
      		}	
      		isUpdating = false;			
      	}
      			
      	document.getElementById('curarr').innerHTML = i;
      }
      </script>

      Javascript Debugger sagt:

      Fehler: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://127.0.0.1/main.htm :: anonymous :: line 60" data: no]
      Quelldatei: http://127.0.0.1/main.htm
      Zeile: 60

      Kommentar

      Lädt...
      X