0

I have a for loop that call a ajax method

function viderTableauConteneur()
{
    var caf =  document.getElementById('CAF').value;
    var tabConteneurAjouter = caf.split("#"); 
    for (var i = 0; i < tabConteneurAjouter.length; i++) {
        if(!verifierConteneurAppartienClient(tabConteneurAjouter[i]));
            removeConteneur(tabConteneurAjouter[i]);
    };

}

function verifierConteneurAppartienClient(serialNumber)
{
    var e = document.getElementById("id_client");
    var idClient = e.options[e.selectedIndex].value;
    var xhr = getXhr();
    var res = 12;
    xhr.onreadystatechange = function()
    {

        if(xhr.readyState == 4 && xhr.status == 200)
        {
            if(xhr.responseText == "0")
                return false;
            else if(xhr.responseText == "1")
                return true;
        }

    }
    xhr.open("GET","index.php?option=com_tkcontrack&controller=facture&task=verifierConteneurAppartienClient&refConteneur="+serialNumber+"&id_client="+idClient,true);
    xhr.send();


}

Well if I alert the xhr.responseText I got "1", but when I alert the result in the viderTableauConteneur method I always got "Undifined"

Any help please

Rad
  • 4,403
  • 4
  • 24
  • 25
  • look further at your code. What result does `verifierConteneurAppartienClient` itself return? The answer is "none" - there is no `return` statement in that function, only in the nested callback. – Alnitak Jan 17 '14 at 13:33
  • Thank's I alreay read this, but I did not pay attention for the other answers – Rad Jan 17 '14 at 13:35

1 Answers1

0

You could modify your code this way :

function viderTableauConteneur()
{
    var caf =  document.getElementById('CAF').value;
    var tabConteneurAjouter = caf.split("#"); 
    for (var i = 0; i < tabConteneurAjouter.length; i++) {
        verifierConteneurAppartienClient(tabConteneurAjouter[i], 
            function() 
            { 
                alert('true');
            },
            function()
            {
                alert('false');
                removeConteneur(tabConteneurAjouter[i])
            }
         );
     }
}

/* callbcakIfTrue and callbackIfFalse have to be 2 functions 
   that will be called respectiveley if the return of the
   ajax call is true or false. 
*/
function verifierConteneurAppartienClient(serialNumber, callbackIfTrue, callbackIfFalse)
{
    var e = document.getElementById("id_client");
    var idClient = e.options[e.selectedIndex].value;
    var xhr = getXhr();
    var res = 12;
    xhr.onreadystatechange = function()
    {

        if(xhr.readyState == 4 && xhr.status == 200)
        {

            if(xhr.responseText == "1")
                callbackIfTrue();
            else
                callbackIfFalse();

        }

    }
    xhr.open("GET","index.php?option=com_tkcontrack&controller=facture&task=verifierConteneurAppartienClient&refConteneur="+serialNumber+"&id_client="+idClient,true);
    xhr.send();


}
Johnny5
  • 6,664
  • 3
  • 45
  • 78