Comment puis-je obtenir le navigateur à jour avant ma prochaine fonction Javascript est appelé?

StackOverflow https://stackoverflow.com/questions/2185587

Question

Je vais avoir un peu de mal à obtenir la fonctionnalité désirée de ma fonction ... En fait, je fais deux appels à des fonctions AJAX (tel que fourni par Oracle APEX, donc je ne peux pas changer ces) mais ils » re prendre un certain temps. Je voudrais montrer la filature classique AJAXy gif alors que l'action se passait, mais je ne suis pas avoir beaucoup de chance. Voici ce que j'ai à ce jour:

function paginate(reportIDs, startRecord)
{
 //block access to the UI and show a "please wait" message
  $.blockUI({ css: { 
            border: 'none', 
            padding: '15px', 
            backgroundColor: '#000', 
            '-webkit-border-radius': '10px', 
            '-moz-border-radius': '10px', 
            opacity: .5, 
            color: '#fff' 
        } });

  //make the two AJAX calls to the APEX provided function
  for(var i = 0;i<reportIDs.length;i++)
  {
    $a_report(reportIDs[i], startRecord, ITEMS_PER_PAGE, ITEMS_PER_PAGE);
  }

  //clean up some APEX garbage on the page
  formatPage();

  //make the "please wait" message go away
  $.unblockUI;
}

Le problème spécifique que je vais avoir en ce moment est que le blocage de l'interface utilisateur semble se produire qu'une seule fois les appels AJAX sont complets. Ensuite, il ne débloque ... Des idées?

Était-ce utile?

La solution

Enveloppez votre ajax dans une autre méthode et de retarder cette méthode par 1 ms

function paginate(reportIDs, startRecord)
{
    //block access to the UI and show a "please wait" message
    $.blockUI({ css: { 
            border: 'none', 
            padding: '15px', 
            backgroundColor: '#000', 
            '-webkit-border-radius': '10px', 
            '-moz-border-radius': '10px', 
            opacity: .5, 
            color: '#fff' 
        }
    });
    setTimeout(function(){
        //make the two AJAX calls to the APEX provided function
        for(var i = 0;i<reportIDs.length;i++)
        {
            $a_report(reportIDs[i], startRecord, ITEMS_PER_PAGE, ITEMS_PER_PAGE);
        }

        //clean up some APEX garbage on the page
        formatPage();

        //make the "please wait" message go away
        $.unblockUI();
   }, 1);
}

Autres conseils

En supposant que les appels sont async - pouvez-vous passer un rappel dans la fonction du rapport ajax ou utilisez une autre fonction ou constante pour définir un rappel? Dans le cas contraire youll au sondage pour la réponse - comment vous feriez cela dépendra de ce qui est de retour $a_report et / ou api derrière leur fonctionnalité ajax.

S'ils ne coûtent pas async alors il est peut-être une faute de frappe ou quelque chose. Comme l'autre affiche suggère $.blockUI; devrait probablement être $.blockUI();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top