Frage

Ich habe keine Ahnung, was hier los und hoffte, dass jemand helfen könnte, ich bin sicher, dass es etwas los leicht, dass ich gerade fehlt.

Ich habe eine Funktion in Javascript, die eine JQuery Post innerhalb von ihm hat. Ich mag die Ergebnisse des Postens zurückzukehren, die nur Text ist, und es in einer Variablen zu setzen. Die Zahl kommt wieder richtig die Post ab, aber wenn ich es in den Variablen gesetzt, die Variable sagt „undefiniert“. Irgendwelche Ideen?

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

function GetTotalSize(){
    var i = "";
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
        i = data.toString();
        return i;
    });
}
War es hilfreich?

Lösung

Sie können es so nicht. Denken Sie daran, das "A" in AJAX bedeutet "Asynchronous". Die Callback-Funktion bieten Ihnen auch nach $.post() aus und gibt ausführen wird GetTotalSize().

Sie müssen Ihren Code restrukturieren diese aufzunehmen. Ich kann in meiner Empfehlung nicht spezifisch sein, weil ich nicht weiß, was der Rest des Code wie folgt aussieht, aber hier ist eine Möglichkeit.

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

function doSomethingWithTotalSize( totalSize )
{
  // whatever
}

Andere Tipps

Peter ist absolut richtig, aber man kann die $ Schnipsel-Methode erzwingen synchron zu arbeiten, indem async: false vorbei.

Das Problem ist, dass Sie i außerhalb der Callback-Funktion zurückkehren. Grundsätzlich, wenn Sie i zurückkehren, dessen Inhalt noch nicht vorhanden sind, und nicht mehr existieren, bis der Server die Daten auf den Callback-Funktion zurückgibt.

Versuchen Sie, diese

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

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

GetTotalSize(DoSomething);

Ich weiß, dies ist ein älterer Beitrag, aber eine Lösung für mich war complete:[delegate] anstatt success zu verwenden. Dadurch wird sichergestellt, dass der callback abgeschlossen ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top