Question

Je n'ai aucune idée de ce qui se passe ici et espérais que quelqu'un pourrait aider, je suis sûr que c'est quelque chose de facile qui me manque.

J'ai une fonction en javascript qui contient un article JQuery. Je voudrais retourner les résultats de l'article qui est juste du texte et le mettre dans une variable. Le nombre revient correctement de la publication, mais lorsque je le mets dans la variable, celle-ci indique "non défini". Des idées?

var total = GetTotalSize();
alert(total);

function GetTotalSize(){
    var i = "";
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
        i = data.toString();
        return i;
    });
}
Était-ce utile?

La solution

Vous ne pouvez pas le faire comme ça. Rappelez-vous, le " A " en AJAX signifie "asynchrone". La fonction de rappel que vous fournissez à $. Post () sera exécutée bien après que GetTotalSize () sera exécuté et renvoyé.

Vous devrez restructurer votre code pour y remédier. Je ne peux pas être spécifique dans ma recommandation car je ne sais pas à quoi ressemble votre reste de code, mais voici une possibilité.

$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
  doSomethingWithTotalSize( data.toString() );
});

function doSomethingWithTotalSize( totalSize )
{
  // whatever
}

Autres conseils

Peter a absolument raison, mais vous pouvez forcer la méthode $ .ajax à fonctionner de manière synchrone en transmettant async: false .

Le problème est que vous renvoyez i en dehors de la fonction de rappel. En règle générale, lorsque vous renvoyez i , son contenu n'existe pas encore et n'existera pas tant que le serveur n'aura pas renvoyé les données à votre fonction de rappel.

Essayez ceci

function GetTotalSize(callback) {    
  $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
       callback(outputData);
    });
}

function DoSomething(data)
{
   //....
}

GetTotalSize(DoSomething);

Je réalise que ceci est un ancien billet, mais une solution pour moi consistait à utiliser complete: [delegate] plutôt que success . Cela garantit que le rappel est terminé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top