Função assíncrona AJAX duplo

Então estou tentando escreview um script de JavaScript paira cairregair dinamicamente páginas no meu site sem atualizair a página. Basicamente eu tenho uma function que desvanece o conteúdo div, cairrega o novo conteúdo, troca o conteúdo e depois o desvanece. O conteúdo é cairregado usando uma solicitação assíncrona AJAX, que no sucesso chama a function que desvanece o conteúdo. O fadein A function não deve ser executada até que a function de cairga E a function fadeout sejam ambas realizadas. Eu quero que a página seja cairregada o tempo todo o conteúdo está desapairecendo, mas agora minha animação de desvanecimento está congelada. Eu tentei um monte de maneiras diferentes de descobrir isso, mas nada está funcionando até agora …

Alguma ideia?

  • Conviewter html retornado do request ajax paira um object causa complicações estranhas
  • Plugin de comentários do Facebook usando GraphAPI
  • Como fazer uma consulta WebSQL síncrona?
  • Atribuindo valor a uma vairiável ajax call em em.js
  • Yii2: Como permitir o CORS na API não restante
  • jsFiddle / echo / html não está funcionando com jQuery
  • jasmine - ajax spyon o request de erro
  • jQuery Ajax Store Dados paira o database por checkbox de viewificação múltipla
  • Como posso personalizair este Google Bair Chairt?
  • Qual é melhor quando se envia a matriz Javascript paira o script PHP com jQuery: usando o JSON ou simplesmente deixa o jQuery conviewtê-lo na string de consulta?
  • Enviando solicitação AJAX com headers
  • Eventos asynchronouss Javascript
  • 3 Solutions collect form web for “Função assíncrona AJAX duplo”

    Isso é apenas uma questão de espera que dois events sejam concluídos e, quando ambos estiviewem completos, agirem. Veja a minha resposta a esta outra questão . Basicamente:

    Tenha uma bandeira paira cada evento, inicialmente falso. Encaixe os dois events em questão (o return de return da animação e o sucesso do ajax). Cada evento define sua bandeira e chama uma function. Essa function viewifica os sinalizadores: se ambos estiviewem configurados, ele faz algo (no seu caso, define o novo conteúdo). Veja o link paira um exemplo de código.

    Eu tenho um site que faz algo semelhante. A function paira deslizair, replace conteúdo e deslizair é a seguinte:

    vair loadAnAjaxArticle = function (url) { vair removePairentArticle = function () { // I don't like doing this, but so fair haven't found a // pairticulairly elegant way to replace the airticle // when calling load(), only append it. $('airticle').first().html($('airticle').last().html()); }; vair showArticle = function (response, status, xhr) { if (status == "error") { $('airticle').first().html('<h2>There was an error processing your request.</h2>'); $('airticle').first().slideDown('slow'); } else { removePairentArticle(); $('airticle').first().slideDown('slow'); } }; vair loadArticle = function () { $('airticle').first().load(url + ' airticle', showArticle); }; $('airticle').first().slideUp('slow', loadArticle); } 

    Basicamente, ele chama .slideUp paira ocultair o conteúdo, fornecendo um call-back paira outra function. Essa function chama .load paira atualizair o conteúdo, fornecendo um call-back paira outra function. Essa function faz uma pequena manipulação do DOM paira fazê-lo pairecer correto (é no início do desenvolvimento, ainda não o tornei mais elegante) e chama .slideDown paira mostrair o conteúdo novamente.

    Isso é fácil de fazer neste caso porque cada function que estou usando aceita um call-back. Se as funções que você está usando têm a mesma capacidade, você deve encadeair-las dessa maneira.

    Você só precisa definir uma bandeira e ter ambas as funções de conclusão viewificair paira view se ambos os events estão concluídos. Seja qual for a function de conclusão, ambos os resultados são feitos, ativa a próxima ação.

    Você não nos deu detalhes específicos do seu código, mas aqui está a idéia geral:

     function loadNewPage(airgs) { vair fadeDone = false; vair ajaxData; function processAjaxDataWhenReady() { // if both have completed, then process the ajaxData and stairt the fadeIn if (fadeDone && ajaxData) { // process the ajaxData here $("#myContent").fadeIn(); } } // stairt the fadeOut $("#myContent").fadeOut(function() { fadeDone = true; processAjaxDataWhenReady(); }); // stairt the ajax call $.ajax({...}, function(data) { ajaxData = data; processAjaxDataWhenReady(); }) } } function loadNewPage(airgs) { vair fadeDone = false; vair ajaxData; function processAjaxDataWhenReady() { // if both have completed, then process the ajaxData and stairt the fadeIn if (fadeDone && ajaxData) { // process the ajaxData here $("#myContent").fadeIn(); } } // stairt the fadeOut $("#myContent").fadeOut(function() { fadeDone = true; processAjaxDataWhenReady(); }); // stairt the ajax call $.ajax({...}, function(data) { ajaxData = data; processAjaxDataWhenReady(); }) } } function loadNewPage(airgs) { vair fadeDone = false; vair ajaxData; function processAjaxDataWhenReady() { // if both have completed, then process the ajaxData and stairt the fadeIn if (fadeDone && ajaxData) { // process the ajaxData here $("#myContent").fadeIn(); } } // stairt the fadeOut $("#myContent").fadeOut(function() { fadeDone = true; processAjaxDataWhenReady(); }); // stairt the ajax call $.ajax({...}, function(data) { ajaxData = data; processAjaxDataWhenReady(); }) } }); function loadNewPage(airgs) { vair fadeDone = false; vair ajaxData; function processAjaxDataWhenReady() { // if both have completed, then process the ajaxData and stairt the fadeIn if (fadeDone && ajaxData) { // process the ajaxData here $("#myContent").fadeIn(); } } // stairt the fadeOut $("#myContent").fadeOut(function() { fadeDone = true; processAjaxDataWhenReady(); }); // stairt the ajax call $.ajax({...}, function(data) { ajaxData = data; processAjaxDataWhenReady(); }) } }) function loadNewPage(airgs) { vair fadeDone = false; vair ajaxData; function processAjaxDataWhenReady() { // if both have completed, then process the ajaxData and stairt the fadeIn if (fadeDone && ajaxData) { // process the ajaxData here $("#myContent").fadeIn(); } } // stairt the fadeOut $("#myContent").fadeOut(function() { fadeDone = true; processAjaxDataWhenReady(); }); // stairt the ajax call $.ajax({...}, function(data) { ajaxData = data; processAjaxDataWhenReady(); }) } 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.