Bir döngü içinde birden Ajax görevler yürütülürken bir DOM yenilenmeye zorlamak nasıl

0 Cevap php

Ben müşterilerine e-posta gönderen bir sayfa var. Aynı anda tüm e-postalar göndermek edememek kolaylık sağlamak için sayfanın alt kısmında bir send all düğmesi vardır. Sorun o hiç kötü ya da inşaat olduğunu. Bu sayfayı yeniden çizilmesi değildir veya tüm Ajax çağrıları işlemek için yönetmek değil ya.

İşte JavaScript ...

function ajaxemail(element,name,email,bonus)
{
    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)
        {

            document.getElementById(element).innerHTML= xmlhttp.responseText
            //document.getElementById(element).style.display = 'none'
            //document.getElementById(element).style.display = 'block'
            //alert(xmlhttp.responseText)
        }
    }
    xmlhttp.open("POST",<?php echo "\"$_SERVER[PHP_SELF]\"";?>,true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("emailto=true&name="+name+"&email="+email+"&bonus="+bonus);
}


function sendall(info)
{
    document.getElementById('sendallmails').disabled = true
    document.getElementById('sendallmails').value = 'Sending mails...'

    length = info.length

    for( i=0; i < length; i++)
    {
        ajaxemail(info[i][0],info[i][1],info[i][2],info[i][3])

    }

}

Eğer yardımcı olur dizisi info inşa edilmiş ve daha sonra fonksiyon denir ve nerede, burada ...

echo "<script>\nvar email_info_array = new Array()\n";

    $j = 0;

    while($row = mssql_fetch_row($rs))
    {
            echo "email_info_array[$j] = new Array('sendlink$j','$row[1]','$row[2]','$row[4]')\n";

            ++$j;
    }

    echo "</script>\n\n";


    echo "<input type=\"button\" name=\"sendallmails\" id=\"sendallmails\" value=\"Send all Mails\"  onclick=\"javascript:sendall(email_info_array)\">\n";

Bir seferde veya bir çağrıldığında o çalışıyor, çünkü başarısızlık ajaxemail() fonksiyonu tarafından çağrılan sayfasında değildir. Bu işe yaramazsa o döngü tarafından çağrıldığında bu. Bu döngü içinde son bir veya iki öğe yapmak gibi görünüyor ... ya ben (örneğin yeniden boyutlandırmak gibi) yeniden çizmek için tarayıcıyı zorlayan şey yaparsam arasında bazı yapabilir.

Ben döngü o yürütülmesine test etmenin bir yolu olarak bir uyarı eklerseniz en azından başarıyla her tekrarında Ajax arama çalışır çalışan (ama basın zorunda olan ok birçok uyarıları!

Ben bir şekilde zorla döngünün her tekrarında tarayıcı DOM yenilemek gerekir. Sayfa daha az duyarlı hale gelirse önemli değil (ama bunun yerine tamamen tepkisiz hale vermedin)

(Ben bunu FF çalışma kez diğer tarayıcılarda test edecek) son Firefox'ta test ediyorum

0 Cevap