2013-09-10 3 views
0

Я успешно интегрировал dajax в свой проект. Это прекрасно, но ему не хватает некоторых функций, которые могли бы сделать его еще лучше - например. видимый индикатор того, что запрос обрабатывается (темный экран, песочные часы, что угодно). Я нашел несколько мест в dajaxice.js, где я должен перехватить запрос, но это не простой способ. Знаете ли вы о каком-либо простом методе или я должен выбрать жесткий путь - не использовать какую-либо структуру ajax и выполнять всю работу вручную ?Индикатор прогресса в dajax/dajaxice?

ответ

0

Что-то, как это будет работать (чтобы дать погрузочной Gmail стиль ... сообщение в правом верхнем углу):

function useLoadingMessage(message) { 
    var loadingMessage; 
    if (message) loadingMessage = message; 
    else loadingMessage = "Loading"; 

    Dajaxice.preHook = function() { 
    var disabledZone = document.getElementById('disabledZone'); 
    if (!disabledZone) { 
     disabledZone = document.createElement('div'); 
     disabledZone.setAttribute('id', 'disabledZone'); 
     disabledZone.style.position = "absolute"; 
     disabledZone.style.zIndex = "1000"; 
     disabledZone.style.left = "0px"; 
     disabledZone.style.top = "0px"; 
     disabledZone.style.width = "100%"; 
     disabledZone.style.height = "100%"; 
     document.body.appendChild(disabledZone); 
     var messageZone = document.createElement('div'); 
     messageZone.setAttribute('id', 'messageZone'); 
     messageZone.style.position = "absolute"; 
     messageZone.style.top = "0px"; 
     messageZone.style.right = "0px"; 
     messageZone.style.background = "red"; 
     messageZone.style.color = "white"; 
     messageZone.style.fontFamily = "Arial,Helvetica,sans-serif"; 
     messageZone.style.padding = "4px"; 
     disabledZone.appendChild(messageZone); 
     var text = document.createTextNode(loadingMessage); 
     messageZone.appendChild(text); 
    } 
    else { 
     document.getElementById('messageZone').innerHTML = loadingMessage; 
     disabledZone.style.visibility = 'visible'; 
    } 
    }; 

    Dajaxice.postHook = function() { 
    document.getElementById('disabledZone').style.visibility = 'hidden'; 
    }; 
} 

вызов useLoadingMessage() из вашего яваскрипта document.ready сценария или из OnLoad в вашей тег тела для самого агностика.

Пара писак в dajaxice.core.js:

Line 49 года:

oXMLHttpRequest.onreadystatechange = function() { 
     if (this.readyState == XMLHttpRequest.DONE) { 
      if(Dajaxice.postHook) Dajaxice.postHook(); 
      if(this.responseText == Dajaxice.EXCEPTION || !(this.status in Dajaxice.valid_http_responses())){ 
       error_callback(); 

Line 65 года:

} 
    if(Dajaxice.preHook) Dajaxice.preHook(); 
    if(method == 'POST'){ 
     oXMLHttpRequest.send(send_data); 
    } 
    else{ 

Javascript все библиотеки агностик, и она должна включать в себя только добавление 2 линии к источнику Dajaxice. Если вы хотите использовать другой элемент загрузки, просто дайте ему id из disableZone в свой html и установите visible = hidden за его css.

Я принял это решение от dwr, которое является dajaxice для Java. У этого есть некоторые другие интересные функции, хотя, как некоторые приличные страницы отладки и прямая загрузка изображения, которые были бы удобны в dajaxice ....;).

Смежные вопросы