Ich habe eine Schleife, in der ich Ajax Xmlhttp-Anforderungen mache. Dies geschieht innerhalb einer Funktion, die durch ein window.onload-Ereignis ausgelöst wird.
Die Ajax-Aufrufe werden mit async=false durchgeführt, weil sie in einer bestimmten Reihenfolge erfolgen müssen, die darauf beruht, dass jeder Schritt abgeschlossen ist, bevor der nächste erfolgen kann.
Mit jeder weiteren Anfrage in der Schleife aktualisiere ich ein Div mit dem xmlhttp.responseText.
Firefox wird zwischen den Aufrufen wie gewünscht aktualisiert.
Der IE ist es nicht. Wenn die Schleife beginnt, wird das Div mit dem Inhalt vor der Schleife gefüllt. Wenn die Schleife endet, wird das Div mit der ersten Aktualisierung außerhalb der Schleife gefüllt.
Kann mir bitte jemand helfen?
Zwei Lösungsversuche: 1. Hinzufügen einer zufälligen Zeichenfolge am Ende des GET-Abfrage-Strings, um eine eindeutige URL zu gewährleisten 2. Übermittlung mit der POST-Methode
Kein Glück mit beiden.
Danke.
Code...
<script type="text/javascript">
function order_process() {
var err;
var queue_id = "<?= implode(':',$plans[$_REQUEST['order_queue_id']]); ?>".split(':'); // Queue ID
var queue_ax = "<?= implode(':',array_keys($plans[$_REQUEST['order_queue_id']])); ?>".split(':'); // Queue Action
i = 0;
for (step in queue_id) {
// The DIV contents that display during each loop iteration
document.getElementById("barber_pole").innerHTML='\
<center>\
<table style="align:left" border="0" cellpacing="1" cellpadding="1">\
<tr><td><B>Processing Order</B><span style="float:right;">Step ' + (i + 1) + '/' + queue_id.length + '</span></td></tr>\
<tr><td style="background-color:#FFFFFF;height:1.5px"></td></tr>\
<tr><td height="20" style="text-align:center">' + queue_ax[i] + '...</td></tr>\
<tr><td height="20"><IMG SRC="../../_include/images/barber_pole.gif" style="vertical-align: middle;"></td></tr>\
</table>\
</center>';
xmlhttp = ajax_request(); // Create request object
xmlhttp.onreadystatechange=function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
1;
}
}
var url = '../../../api/order_process.php?api_login=' + "<?=$api_login?>" + '&api_pass=' + "<?=$api_pass?>" + "&order_id=<?= $_REQUEST['order_id']?>" + '&order_action_id=' + queue_id[step] + '&timeid=' + Math.random();
xmlhttp.open("GET",url,false);
xmlhttp.send();
// If the response includes the string 'failed' exit the loop and render error error message
if (xmlhttp.responseText.split(',')[0] == 'failed') {
err = queue_ax[i] == 'Registering Domain'
? "<h1 class=\"landing-title\">" + fname + ', ' + "<?=$feedback[domain_register][title]?>" + "</h1><DIV class='landing-body'><?=$feedback[domain_register][body]?></DIV>"
: queue_ax[i] == 'Provisioning cPanel Account'
? "<h1 class=\"landing-title\">" + fname + ', ' + "<?=$feedback[cpanel_provision][title]?>" + "</h1><DIV class='landing-body'><?=$feedback[cpanel_provision][body]?></DIV>"
: queue_ax[i] == 'Credit Card Fraud Protection'
? "<h1 class=\"landing-title\">" + fname + ', ' + "<?=$feedback[maxmind_minfraud][title]?>" + "</h1><DIV class='landing-body'><?=$feedback[maxmind_minfraud][body]?>\"" + xmlhttp.responseText + '"</DIV>'
: queue_ax[i] == 'Verifying Payment'
? "<h1 class=\"landing-title\">" + fname + ', ' + "<?=$feedback[verify_payment][title]?>" + "</h1><DIV class='landing-body'><?=$feedback[verify_payment][body]?>\"" + xmlhttp.responseText + '"</DIV>'
: xmlhttp.responseText == 'failed,'
? "<h1 class=\"landing-title\">" + fname + ', ' + "<?=$feedback[gen_err][title]?>" + "</h1><DIV class='landing-body'><?=$feedback[gen_err][body]?></DIV>"
: "<h1 class=\"landing-title\">" + fname + ', ' + "<?=$feedback[gen_err][title]?>" + "</h1><DIV class='landing-body'><?=$feedback[gen_err][body]?>\"" + xmlhttp.responseText + '"</DIV>';
break;
}
i++;
}
if (err) {
document.getElementById("landing-pres").innerHTML = err;
Cufon.replace('.landing-title');
} else {
document.getElementById("barber_pole").innerHTML = "<?= $thank[$_REQUEST['order_queue_id']][1] ?>";
}
}
window.onload=order_process;
</script>
1 Stimmen
Können Sie einen Code posten? Ihre Lösungsversuche scheinen der richtige Weg zu sein
0 Stimmen
Haben Sie versucht, einen Haltepunkt in der Schleife mit den Entwickler-Tools des IE8 zu setzen?
0 Stimmen
Naikus- Code oben hinzugefügt. Steve Mc- ich bin nicht vertraut mit dem, was Sie vorschlagen. Wird ein Haltepunkt zu Testzwecken gesetzt? Können Sie eine Ressource zur Verfügung stellen, die das erklärt. Ich werde in der Zwischenzeit nachschauen. Vielen Dank an Sie beide für Ihren Kommentar...
0 Stimmen
Ich habe das gleiche Problem. Ich setze Warnungen zwischen den einzelnen Aufrufen, und der Code funktioniert gut, es ist nur, wenn sie back-to-back laufen, dass die Updates nicht passieren (bis die Schleife abgeschlossen ist). Hat jemand eine andere Lösung?