2010-10-27 7 views
0

J'ai un problème avec mon code.Problème avec JS jQuery AJAX

function fnFormatDetails (oTable, nTr) 
{ 
    var aData = oTable.fnGetData(nTr); 
    var sOut = ""; 

    var ajax = $.ajax({ 
     url: "/wemi/mediaplaner/show?id="+aData[1], 
     success: function(data) { 
      //return data; 
      //return sOut = data; 
      //console.log(sOut); 
     }, 
     error: function() { 
      //alert("Error"); 
     } 
    }); 

    //document.write(ajax.responseText); //write empty Text 
    console.log(ajax); //Real Object all is OK 

    //console.log(ajax.responseText); get empty Text 
    //alert(ajax.responseText); // get Empty Text 
    return sOut; 
} 

J'ai juste besoin d'imprimer le texte ajaxed ... et comme vous pouvez le voir, j'obtenir seule réponse undifined ou vide.

mais si j'imprimer ou alerte en fonction de la réussite, tout est ok et je reçois ma réponse ...

Répondre

4

Vous avez découvert la réponse déjà. L'appel ajax est asynchrone. Le code dans le gestionnaire "success" sera exécuté lorsque la requête HTTP est terminée. La fonction $.ajax elle-même, cependant, retourne immédiatement après le démarrage de la demande.

L'approche correcte consiste à placer le code dans le rappel "succès". (Ou mettre l'appel à une autre fonction là.)

+0

mais si retour en succès ... je n'ai pas de rappel si j'imprime cette fonction ... vous savez ce que je veux dire, un besoin de ce texte dans d'autres fonctions, mais Je dois appeler une fonction pour cela. Je dois ajaxed texte, mais mon code est un peu faux ... –

+0

Appelez simplement votre autre fonction de l'intérieur du code "succès". Vous ne pouvez pas obtenir une valeur "return" à partir d'un appel .ajax $ - cela ne fonctionne pas de cette façon. – Pointy

+0

Puis-je laisser fnFormatDetails() retourner le texte ajaxed? –