2013-07-24 56 views
1

我正在研究一個函數來重新載入頁面,但我們的菜單實際上是一個手風琴,不應該重新加載。即,使其刷新頁面以繼續處於相同狀態。不要重新充電菜單刷新Jquery-Ajax的頁面

我在下面顯示的功能我使用JQuery來處理重新加載頁面,因此在模板的中心相同的負載。

下面這個函數是頁面的刷新:

function recarregarPagina() { 

//Verifica quais teclas estão sendo pressionadas 
$(document).on("keydown", function(e) { 

    //Houve um evento para recarregar a página? 
    if ((e.which || e.keyCode) === 116 || (e.keyCode === 82 && e.ctrlKey)) { 
     e.preventDefault(); 

     //Inicializa a hash 
     var hash = window.location.hash; 
     console.log("recarregarPagina 1=" + hash); 

     //A última url está definida? 
     if (hash !== '' && hash !== undefined) { 
      console.log("recarregarPagina 2=" + hash); 

      //Recarrega a página central do template de acordo com a última url visitada 
      loadView(hash, false, true, true); 
     } 
    } 
}); 
} 

下面的功能是在模板的中心處的負載圖(頁):

function loadView(url, post, submit, repeat) { 

//Remove o hash da url para poder carregá-la sem a ocorrência de loop 
url = url.replace("#", ""); 

//Inicializa variáveis 
var div = $("#divConteudo"); 
var overlay = $("#overlay"); 


var type = "POST"; 
var data = $("form").serialize(); 

//Verifica se o tipo de requisição ajax será post ou GET 
if (!post) { 
    type = "GET"; 
} 

//A última hash é diferente da url atual? 
if (lastHash !== url || repeat) { 

    //Exibe o loader 
    overlay.show(); 
    div.hide(); 


    /** 
    * Inicia a requisição AJAX 
    */ 
    $.ajax({ 
     //Antes de enviar a requisição 
     beforeSend: function() { 
      //Atualiza o último hash visitado 
      lastHash = url; 

      //Insere a hash na url do navegador 
      window.location.hash = url; 

     }, 
     type: type, 
     url: url, 
     //Para enviar os dados junto com a página, verifica se será necessário o envio ou não, 
     //pois dependendo do caso o $_POST pode atrapalhar o carregamento 
     data: function() { 

      //Não foi definido o envio? 
      if (!submit) { 
       //Não retorna os dados 
       return null; 

       //O envio foi definido, ou omitido 
      } else { 
       //Retorna os dados do formulário 
       return data; 
      } 
     } 


     //Quando a requisição estiver concluída 
    }).done(function(data) { 

     //Aguarda o carregamento da View 
     $(div).html(data).load(function() { 
     }); 

     //Remove o loader 
     overlay.hide(); 
     div.show(); 

     //Inicializa o envento para tratar a submissão do form 
     formSubmit($("form")); 

    }); 
} 

回答

0

這取代的#divConteudo的全部內容與阿賈克斯迴應:

$(div).html(data); // you don't need the .load you have after this 

你將不得不目標一個內部div相反,並篩選響應以獲取您想要更新的內容。類似這樣的:

var targetDiv = $('#mioloDoConteudo'); 
var newData = $(data).find('#mioloDoConteudo').html(); 
targetDiv.html(newData); 
+0

非常感謝。此解決方案不能解決我的問題,但正確回答了我的問題。我的問題是當用戶點擊瀏覽器的刷新按鈕,最終收集。 – mayconfsbrito

+0

我不認爲你可以對瀏覽器刷新按鈕做任何事情,它總是會重新加載頁面。如果您需要保持狀態,則在頁面重新加載時(並使用服務器端會話或本地存儲來保持狀態),您必須手動處理它。 – bfavaretto