CHAMADA AJAX ASSÍNCRONOMA

 Tópico anterior Próximo tópico Novo tópico

CHAMADA AJAX ASSÍNCRONOMA

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#487245 - 19/02/2019 11:01:18

MRSILVA
MARINGA
Cadast. em:Julho/2015


Olá.
Alguém pode me ajudar de como fazer uma chamada Ajax assíncronoma  esperar o resultado da chamada para  dar continuidade na execução do código.
Vou explicar melhor:

Tenho uma classe JavaScript que tem uma chamada Ajax que me retorna um array de objetos,  tenho outra classe JavaScript que chama essa esse método, mas não estou conseguindo implementar Callback

Método da primeira classe:

this.GetProdutoGrupo = async function (tipo, indexIni, indexFim, callback) {

        var callbackFunction;
            $.ajax({
                type: 'GET',
                url: 'api/ProdutoGrupo/GetProdutoGrupoPaginador',
                data: { IdTipo: tipo, indexIni: indexIni, indexFim: indexFim },
                dataType: "json",
                success: function (data) {
                    callbackFunction = callback(data);
                    return callbackFunction;
                                      
                },
                error: function (request, status, error) {
                    err(request.responseText);
                },
                failure: function (request, status, error) {
                    err(request.responseText);
                },

            });  

        return callbackFunction;
    }  


Parte do código que chama a chamada Ajax:
    

$(".page-item").click(function () {

                var indexIni = 1;
                var indexFim =  300;
                var tipo = 1;
                var retorno;
                produtoGrupo.GetProdutoGrupo(tipo, indexIni, indexFim, RetornoProdutoGrupo(retorno));
              

            }

        }
      
    });
  


Método que devia fazer o tratamento do retorno

  async function RetornoProdutoGrupo(retorno){

      
        produtoGrupo.ListObjetos = retorno;
      
    // O código continua aqui

    }


Já fiz varias pesquisas na internet más não consigo fazer o código esperar o retorno alguém pode me ajudar implementar isso.
Desde já agradeço.




Resposta escolhida #487246 - 19/02/2019 11:21:21

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Não basta colocar o calback assíncrono, a chamada AJAX também tem que estar:

        var callbackFunction;
            $.ajax({
                type: 'GET',
                async: true,
                url: 'api/ProdutoGrupo/GetProdutoGrupoPaginador',
                data: { IdTipo: tipo, indexIni: indexIni, indexFim: indexFim },
                dataType: "json",
                success: function (data) {
                    callbackFunction = callback(data);
                    return callbackFunction;
                                      
                },
                error: function (request, status, error) {
                    err(request.responseText);
                },
                failure: function (request, status, error) {
                    err(request.responseText);
                },

            });  


Isso deve resolver.
Mas honestamente, se você está nesse ponto, melhor partir para uma solução mais robusta como Angular ou React ou até mesmo Knockout

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487247 - 19/02/2019 11:57:07

MRSILVA
MARINGA
Cadast. em:Julho/2015


Obrigado Kerplunk.

Fiz como mencionou más  método abaixo não espera o retorno da chamada Ajax, preciso do retorno para dar continuidade no processamento do código:

async function RetornoProdutoGrupo(retorno){
      
        produtoGrupo.ListObjetos = retorno;
      
    // O código continua aqui

    }  


Pode me ajudar nisso mais uma vez, estou desde ontem tentando sem sucesso e preciso muito dar continuidade no meu projeto.

Desde já agradeço.

Citação:
Mas honestamente, se você está nesse ponto, melhor partir para uma solução mais robusta como Angular ou React ou até mesmo Knockout  


Até queria estudar essas tecnologias más nos últimos tempos pulei do desckTop  para Web estou apreendendo WebApi, javaScript, JQuery, Bootstrap e padrão MVC  tudo de uma só vez no momento se focar em mais alguma coisa meu projeto vai parar de vez.





#487250 - 19/02/2019 13:07:16

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se você quer que espere pelo processamento então assíncrono é o exato oposto do que você quer.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487252 - 19/02/2019 13:33:02

MRSILVA
MARINGA
Cadast. em:Julho/2015


Sim kerplunk sei disso inclusive se fosse para fazer síncrona  não estaria com dificuldade erá só colocar o parâmetro  async  da chamada Ajax como false o método já estaria praticamente pronto.

Quero fazer assíncrono para  evitar o travamento da tela do usuário caso o servidor não responda ou demore muito para responder uma requisição.

o problema é que não se implementar a forma de esperar o retorno, já tentei alguns exemplos mas meu código não funciona (não espera).

Nas requisições em feitas em C# é muito fácil esperar o retorno utilizando async em conjunto com await  mas em JavaScript ainda não consegui fazer funcionar.

Desde já agradeço quem puder me apontar o caminho.








#487253 - 19/02/2019 13:39:01

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
O que você quer:
Que não pareça "travado" enquanto a requisição não chega, certo? Se for isso, não é usando assincronicidade que se resolve. Assíncrono, significa que tudo roda normal depois da chamada, ou seja, você chama algo assíncrono e o código segue normal. Síncrono é exatamente o oposto, tudo para na sua chamada, nada segue. Mas o que você quer é uma chamada síncrona que não fique "travada" ou entendi errado?

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487257 - 19/02/2019 14:25:12

MRSILVA
MARINGA
Cadast. em:Julho/2015


Isso mesmo Kerplunk!



#487258 - 19/02/2019 14:54:47

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Então o que você quer não tem nada a haver com síncrono ou assíncrono, você quer simplesmente um spinner enquanto a requisição ocorre. Isso é bem simples e tem um monte de exemplos prontinhos. Procure por "Ajax loading spinner". Tem vários gráficos bem legais de spinner aqui

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487261 - 19/02/2019 15:31:11

MRSILVA
MARINGA
Cadast. em:Julho/2015


Kerplunk.

Achei que a recomendação era sempre utilizar as requisições  assíncrono.

Vou implementar o código depois posto se deu o resultado esperado.

Mais uma vez obrigado pela sua disposição em ajudar.



#487263 - 19/02/2019 17:00:01

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Vai ser assíncrono se for a melhor escolha, vai ser síncrono ser for a melhor escolha. A PREFERÊNCIA é para uso de assincronicidade, mas sua necessidade(de não executar mais nada até ter o retorno) requer que a chamada seja síncrona. Se não existe a possibilidade de ser assíncrono, talvez a estruturação do que está fazendo não seja a melhor possível.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por MRSILVA em 22/07/2019 09:01:28