Pergunta

Eu não tenho idéia o que está acontecendo aqui e estava esperando que alguém poderia ajudar, eu tenho certeza que é algo fácil acontecendo que eu estou em falta.

Eu tenho uma função em javascript que tem um posto dentro JQuery dele. Eu gostaria de retornar os resultados do post que é apenas texto e colocá-lo em uma variável. O número está voltando corretamente desde o post, mas quando eu colocá-lo na variável, a variável diz "indefinido". Alguma idéia?

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

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

Solução

Você não pode fazê-lo assim. Lembre-se, o "A" no meio de AJAX "Asynchronous". A função de retorno de chamada que você fornecer para $.post() irá executar bem depois executa GetTotalSize() e retornos.

Você precisa reestruturar seu código para acomodar isso. Eu não posso ser específico em minha recomendação porque eu não sei o que o resto de sua aparência código como, mas aqui é uma possibilidade.

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

function doSomethingWithTotalSize( totalSize )
{
  // whatever
}

Outras dicas

Peter é absolutamente certo, mas você pode forçar o método $ .ajax ao trabalho de forma síncrona, passando async: false.

O problema é que você está retornando fora i da função de retorno de chamada. Basicamente, quando você retornar i, o seu conteúdo não existem ainda, e não existirá até que o servidor retorna os dados para a sua função de retorno.

Tente este

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

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

GetTotalSize(DoSomething);

Sei que este é um cargo mais velho, mas uma solução para mim foi usar complete:[delegate] em vez de success. Isso garante que o callback está completo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top