Ajax-Relaod von mehreren DIV-Boxen

xxxmike

Erfahrenes Mitglied
Hallo,
ich möchte 2-3 verschiedene inhalte in den jeweiligen div boxen per Ajax neu laden, so alle 20 sek. Bei einer div Box ist das kein Thema, nur bei den anderen bekomme ich das nicht hin.
Hier mal das ajax script das ich derzeit nutze

Code:
var http_request = false;
var requestOnLoad = false;

            function makeRequest(url, postVar) {
                requestOnLoad = true;
				http_request = false;

                if (window.XMLHttpRequest) { // Mozilla, Safari,...
                    http_request = new XMLHttpRequest();
                    if (http_request.overrideMimeType) {
                        http_request.overrideMimeType('text/xml');
                    }
                } else if (window.ActiveXObject) { // IE
                    try {
                        http_request = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e) {}
                    }
                }

                if (!http_request) {
                    alert('Giving up :( Cannot create an XMLHTTP instance');
                    return false;
                }
                http_request.onreadystatechange = alertContents;
                http_request.open('POST', url, true);
				http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				http_request.send(postVar); // http_request.send("name=wert&name2=wert2");

            }

            function alertContents() {

                if (http_request.readyState == 4) {
                    if (http_request.status == 200) {
						document.getElementById("holder").innerHTML = http_request.responseText;	
					
            relodeAllImage();
                    } else {
                        alert('There was a problem with the request.');
                    }
					requestOnLoad = false;
                }

            }
			
			function isRequestOnLoad()
			{
				return requestOnLoad;
			}
			
			function relodeAllImage()
			{
				for(var i = 0; document.images[i]!=null; i++ )
				{
				document.images[i].src = document.images[i].src;
				}
			}



die problematik ist, dass hier bereits die div box als holder bezeichnet wird.

hier nun die php datei

PHP:
<script type="text/javascript">

function refreshTable()
{
    makeRequest('countnow.php');
}

var aktiv = window.setInterval("refreshTable()",30000);
</script>


<body onload="makeRequest('countnow.php');">

<div id="holder"></div>

so, das geht auch soweit alles super und so wie ich mir das vorstelle, nur wenn ich einen weitern inhalt in einer div box laden will, geht das nicht, da ich ja logischerweise nur eine div box mit id=holder nutzen kann.

die erste request abfrage ist bei mir im header, die anderen sollen in andere unter seiten eingebaut werden.

kann ich diese zeile irgendwie ändern, dass ich die divs auch anders benennen kann?
document.getElementById("holder").innerHTML = http_request.responseText;

zum beispiel holder1, holder2 usw.

ich hoffe ich konnte es so rüber bringen das ich verstanden werde.
Danke schon mal
 
Hi,

dann musst du die ID als Argument an die Funktion übergeben und dort entsprechend weiterreichen.

Beispiel:

Aufruf
Code:
function refreshTable(strID){
    makeRequest('countnow.php', strID);
}

var aktiv = window.setInterval("refreshTable('holder')",30000);

Request
Code:
function makeRequest(url, strID, postVar) {
  // ... bisheriger Code ...

  http_request.onreadystatechange = function(){
  	alertContents(strID);
  };

  // ... bisheriger Code ...
}

Callback-Funktion
Code:
function alertContents(strID) {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      document.getElementById(strID).innerHTML = http_request.responseText;	
      relodeAllImage();
    } else {
      alert('There was a problem with the request.');
    }
    requestOnLoad = false;
  }
}

Alles ungetestet, das Prinzip sollte aber auf jeden Fall deutlich werden.

Im Übrigen möchte ich dich bitten, dich - wie in der Netiquette in Punkt 15 zugestimmt - an die Gross- und Kleinschreibung zu halten. Besten Dank im voraus.

Ciao
Quaese
 

Neue Beiträge

Zurück