¿Cómo consigo el navegador a la actualización antes de mi próxima función Javascript se llama?

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

Pregunta

Estoy teniendo un poco de problemas para conseguir la funcionalidad deseada de mi función ... Básicamente, estoy haciendo dos llamadas a funciones AJAX (según lo dispuesto por Oracle APEX, así que no puedo cambiar estos términos), pero' volver a tomar un tiempo. Me gustaría mostrar el gif AJAXy hilado estándar, mientras que la acción estaba pasando, pero no estoy teniendo mucha suerte. Esto es lo que tengo hasta ahora:

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

El problema específico que estoy teniendo en este momento es que el bloqueo de la interfaz de usuario parece que sólo ocurrirá una vez que las llamadas AJAX se han completado. Entonces nunca se desbloquea ... ¿Alguna idea?

¿Fue útil?

Solución

Envuelva su ajax en otro método y el retraso que el método por 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);
}

Otros consejos

Suponiendo que las llamadas son async - Se puede pasar una devolución de llamada a la función de informe ajax o utilizar otra función o constante para establecer una devolución de llamada? De lo contrario usted tendrá que encuesta para la respuesta - la forma en que lo haría, que dependerá de cuál de volver de $a_report y / o la API detrás de su funcionalidad Ajax.

Si se enviaban async entonces puede ser un error tipográfico o algo así. Como el otro cartel sugerir $.blockUI; probablemente debería ser $.blockUI();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top