2014-07-09 5 views
5

Ich verschiebe eine Rails-App, die neue Ansichten über URLs in eine vollständige AJAX-Version lädt. Wir laden alle Ansichten über AJAX und ändern die URL über die HTML5-Verlaufs-API. Wir möchten auch das HTTP-Caching verwenden, so dass wir alle Partitionen zwischenspeichern können.AJAX in Rails 4, HTML5-Verlaufs-API und Caching

Aber jetzt sind wir auf ein Problem fest. Es gibt jetzt im Wesentlichen zwei Möglichkeiten, um jede Seite zu laden - durch die URL oder durch Klicken auf etwas, das diese teilweise über AJAX lädt. Aber das hat uns dazu gebracht, zwei verschiedene Views und Controller zu erstellen, um dasselbe zu laden - einen direkt von der URL und einen durch Klicken auf die Hauptseite und Laden über AJAX und die History-API. Wie stellen wir sicher, dass beim Laden direkt über URL und mit AJAX die gleiche Ansicht aus dem Browser-Cache geladen wird?

Um ein Beispiel zu geben, verwendet GitHub in ihrem Tree Slider. Sie können den Code direkt aufrufen, indem Sie im Fenster zu ihm navigieren oder direkt den URL-Pfad dafür verwenden. Ich bin sicher, wenn die Seite vorher geladen wurde, bekommen sie Teile davon aus dem Browser-Cache.

Gibt es eine Möglichkeit, Anfragen an die gleiche URL zu senden, aber nur partiell zu rendern oder die gesamte Seite zu laden, abhängig davon, ob die Anfrage durch Klicken auf die Registerkarte oder in der Adressleiste gesendet wird? Es sollte zwischengespeicherte Teiltöne verwenden, wenn sie bereits im Browser vorhanden sind.

Dank

Antwort

0

Wenn ich es richtig wollen Sie unterschiedliche Verhaltensweisen für die gleiche Wirkung haben, ein, wenn die Anforderung mit einem Ajax-Request bekommen und andere ist.

Sie können es tun dies zu tun:

mypage_controller.rb

def my_page 
    ...(your logic here) 
    respond_to do |format| 
    format.js 
    format.html 
    end 
end 

my_page.js.erb

alert('testing'); 
.... (further ajax code here) 

Hier ist ein Artikel, der dieses Verhalten tut Rails 4: How to partials & AJAX, dead easy

Auf diese Weise können Sie die gleiche Aktion für Ajax beantworten und erhalten Quest