2015-07-21 4 views
12

mam następny problem, mam stronę, która otwiera się z AJAX i zmieniać dynamicznie adres URL przeglądarki jak toszyny zmiana ajax URL

window.history.pushState(null, null, "/desktop/manage/add"); 

więc kiedy jestem w „Dodaj” strony i otworzyć dowolną stronę z pobierz/opublikuj zapytanie (nawet inna strona internetowa) i naciśnij przycisk "Go back" w przeglądarce Nie otrzymuję pełnego kodu HTML strony, ale tylko część ajaxową. W ten sposób: pic

Jak to naprawić?

P.S Jeśli usuniemy window.history.pushState (null, null, "/ desktop/manage/add"); wszystko działa dobrze, ale muszę zmienić adres URL przeglądarki.

UPD: otworzyć tę stronę za pomocą żądania POST, NO ajax enter image description here

następnie otworzyć "zarządzanie/add" stronę za pośrednictwem AJAX enter image description here

Następnie przejdź do google.com (każda strona) a Kliknij przycisk wstecz enter image description here

i moja strona ajax załadowany nie jest pełna strona HTML, jest tylko ajax jak tylko część tekstu: enter image description here

Czytałem o tym problemie i ussually szyny programiści dodać zdarzenie do tyłu przycisk kliknij aby application.js tak:

$(window).on('popstate', function() { 
    $.get(document.location.href) 
    }); 

Ale to działa tylko jest użytkownik nie przejść do Google (lub jakakolwiek inna strona) działa tylko wtedy, gdy przejdą przez moją stronę i klikną przycisk Wstecz.

UPD2: /dodać kontroler

def addProduct 

@categories = Market.where("depth = ? and title != ''", 0).reorder(:title); 
     @tags = UserTag.where(user_id: current_user.id).includes(:tags); 
     respond_to do |format| 
      format.html{render layout: "desktop_layout"} 
      format.js {} 
     end 
    end 

tutaj jest moje addProduct.js: (ten plik renderowane widać na zrzucie po kliknięciu przycisku Wstecz)

window.history.pushState('page212', 'Mikee.kz', '/desktop/manage/add'); 
    $("#rightBlock").html("<%= escape_javascript(ajax_section id:'page', :render => 'myadd') %>"); 
+0

Czy możesz edytować pytanie, aby dołączyć dane wyjściowe z dziennika po przełączeniu się między stronami? –

+0

@JamesSmith, nie ma żadnego dziennika po kliknięciu przycisku wstecz ( – mondayguy

+0

Ah right, pushState nie powoduje niczego, co mogłoby zostać załadowane. Https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history. Czy/desktop/manage/dodaje stronę, którą użytkownik wcześniej odwiedził? –

Odpowiedz

3

Miałem ten sam problem jakiś czas temu, ale zamiast tego z replaceState(). Na początku tego nie zauważyłem, ale mój programista zwrócił mi na to uwagę. Okazało się, że tego nie zauważyłem, ponieważ korzystałem z Firefoksa i wydaje mi się, że jest to błąd wyłącznie dla Chrome/Chromium, z którego korzystał. W rzeczywistości wydaje się, że był to błąd dla a while now, ale Google jeszcze tego nie naprawił.

Mimo to wydaje się, że nie ma prawdziwej poprawki dla tego, przynajmniej do czasu, gdy Google to naprawi. Oczywiście po prostu ponowne załadowanie strony sprawi, że problem zniknie na chwilę, ale nadal widzisz brzydki kod. Po prostu nie możesz używać Chrome/Chromium, ale to też nie jest rozwiązanie.