Domanda

Non ho idea di cosa stia succedendo qui e spero che qualcuno possa aiutare, sono sicuro che è qualcosa di facile che mi manca.

Ho una funzione in javascript che contiene un post JQuery al suo interno. Vorrei restituire i risultati del post che è solo un testo e inserirlo in una variabile. Il numero sta tornando correttamente dalla Posta ma quando lo inserisco nella variabile, la variabile dice "non definito". Qualche idea?

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

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

Soluzione

Non puoi farlo in quel modo. Ricorda, il " A " in AJAX significa "asincrono". La funzione di callback fornita a $ .post () verrà eseguita correttamente dopo l'esecuzione e la restituzione di GetTotalSize () .

Dovrai ristrutturare il tuo codice per adattarlo. Non posso essere specifico nella mia raccomandazione perché non so come sia il resto del tuo codice, ma ecco una possibilità.

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

function doSomethingWithTotalSize( totalSize )
{
  // whatever
}

Altri suggerimenti

Peter ha assolutamente ragione, ma puoi forzare il metodo $ .ajax a funzionare in modo sincrono passando async: false .

Il problema è che stai restituendo i al di fuori della funzione di callback. Fondamentalmente quando si restituisce i , il suo contenuto non esiste ancora e non esisterà fino a quando il server non restituirà i dati alla funzione di callback.

Prova questo

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

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

GetTotalSize(DoSomething);

Mi rendo conto che questo è un post più vecchio, ma una soluzione per me era usare complete: [delegate] anziché success . Questo assicura che il callback sia completo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top