Come faccio ad avere il browser per aggiornamento prima del mio prossimo funzione Javascript si chiama?

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

Domanda

Sto avendo un po 'di difficoltà a raggiungere la funzionalità desiderata dalla mia funzione ... In sostanza, sto facendo due chiamate alle funzioni AJAX (come previsto da Oracle APEX, quindi non posso cambiare questi), ma' ri lento. Mi piacerebbe mostrare la gif AJAXy filatura standard, mentre l'azione era in corso, ma non sto avendo molta fortuna. Ecco quello che ho finora:

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;
}

Il problema specifico che sto avendo in questo momento è che il blocco dell'interfaccia utente sembra accadere solo una volta le chiamate AJAX sono completi. Allora mai sblocca ... Tutte le idee?

È stato utile?

Soluzione

Avvolgere il tuo Ajax in un altro metodo e il ritardo che il metodo da 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);
}

Altri suggerimenti

Supponendo le chiamate sono async - si può passare un callback per la funzione di report ajax o utilizzare un'altra funzione o costante per impostare una richiamata? In caso contrario, youll devono sondaggio per la risposta - come si dovrebbe fare questo dipenderà da che cosa è tornato da $a_report e / o l'API dietro la loro funzionalità Ajax.

Se arent async allora può essere un errore di battitura o qualcosa del genere. Come l'altro poster suggerire $.blockUI; dovrebbe probabilmente essere $.blockUI();

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