2012-04-08 14 views
1

Derzeit versuche ich eine Website dynamisch zu füllen. Wenn ich durch den Code gehe, funktioniert es perfekt. Wie auch immer, wenn ich es beim Laden der Seite wie geplant starte, funktioniert es nicht. Der entsprechende Code ist:Javascript/AJAX funktioniert nur beim Debuggen

<body onload="populate_all(string)";> 

function populate_all(string) 
{ 
    var split = string.split(" "); 
    for(i = 0; i < split.length; i++) 
    { 
    populate(split[i], 'main'); 
    } 
} 

function populate(string, location) 
{ 
    if (string.length==0) 
    { 
    document.getElementById(location).innerHTML=""; 
    return; 
    } 

    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     var divTag = document.createElement("div"); 

     divTag.className ="info"; 

     divTag.innerHTML = xmlhttp.responseText; 

     document.getElementById(location).appendChild(divTag); 
    } 
} 
xmlhttp.open("GET","populate.php?string="+string,true); 
xmlhttp.send(); 
} 

Ich habe genug zu diesem Thema lesen bis zu sein, ziemlich sicher, dass die PHP ist nicht das Problem. Grundsätzlich: Ich führe eine JavaScript-Funktion mit AJAX mehrmals in einer Schleife und der Code funktioniert nur, wenn ich es debugge. Danke für die Hilfe!

+0

Definieren Sie "es funktioniert nicht". –

+0

Sorry, "es funktioniert nicht" ist nicht wirklich klar. Anstatt die divs zu erstellen, die ich möchte, das sind mehrere divs mit verschiedenen Informationen, erstellt es entweder nur das letzte div oder vier Instanzen des letzten div. – NSchulze

Antwort

0
  1. Declarexmlhttp vor Ort.
  2. Verwenden Sie einen anderen variablen Namen als location. location ist eine globale Variable, die Eigenschaften und Methoden zum Bearbeiten des aktuellen Standorts enthält.

    function populate(string, s_location) { 
        var xmlhttp; 
    

Derzeit halten Sie die xmlhttp Variable in der populate Methode überschrieben werden. Als Ergebnis zeigt das Objekt xmlhttp auf die letzte Anforderung.

+0

Das hat den Trick gemacht! Ich liebe es, wenn die Dinge so einfach sind. Vielen Dank! – NSchulze

0

Für mich war es dies: Use javascript variable outside success function

Wenn Anrufe auf $ .getJSON etc zu machen, mit dem Debugger es behebt/ändert das Timing und die Scoping angebracht. Ich aktualisierte einen Tabellenzellenwert aus einer xhr-Antwort, die von zeitgesteuerten Hintergrundereignissen ausgelöst wurde, und ich musste die Zellenaktualisierungen in den geschachtelten Erfolgsfunktionen durchführen. Mit dem Debugger haben Dinge magisch funktioniert.

Verwandte Themen