2012-04-15 4 views
6

Ich möchte auf den Inhaltsbereich meiner Website mit jQuery/AJAX $().load() Funktion neu laden. Aber mein Problem ist, dass die header und footer auf allen Seiten angezeigt werden müssen, unabhängig von Ihrer Eingabe-URL.

Meine Website ist mit Vorlagen erstellt, so war mein erster Gedanke, die Ausgabe des Layouts über und unter dem eindeutigen Inhalt zu entfernen, wie ich dann verhindern würde, dh. Das Menü wird zweimal angezeigt. Aber ich erkannte, dass, wenn der Benutzer meine Seite nicht über die erste Seite betritt, sagen wir index.php, er niemals Kopf- oder Fußzeilen sehen wird, sondern nur eine unstrukturierte Textseite.

Meine Frage ist, wie würdest du dieses Problem umgehen? JavaScript (+ jQuery) und HTML5 sind erlaubt.

+0

Welche Sprache verwenden Sie für Ihr Backend? PHP? Coldfusion? Die Schönheit des AJAX-Ladens ist, dass egal, auf welcher Seite eine Person landet, sie bekommen, was Sie vor dem AJAX-Aufruf dort platziert haben, so dass Ihre Kopfzeile, Fußzeile, Menü usw. bereits da sind. Wie unten angegeben, können Sie Ihre AJAX-Antwort in einen beliebigen Container auf der Seite laden. Wenn Sie AJAX verwenden, um Inhalte zu erfassen, wenn jemand auf das Menü klickt, ersetzen Sie einfach das HTML in Ihrem Container durch neuen Inhalt aus der AJAX-Antwort. – Lazerblade

+0

Emil; Sie sollten auswählen, welche Antwort für Ihre Lösung richtig war, wenn Sie sie gefunden haben. Ansonsten aktualisieren Sie Ihre Frage mit dem, was sich geändert hat. – veeTrain

+0

werde ich tun, sorry.Ich habe keine Zeit, die Antworten weiter zu untersuchen, ich habe versucht, mit jmort253 zu arbeiten, habe aber einige Fehler (ich werde dazu einen Kommentar abgeben). Meine Arbeit hat leider die Verbindung zu meinem Server herausgefiltert, so dass ich keine Chance habe, etwas zu tun, wenn ich hier bin. – Emil

Antwort

5

page.php:

<div id="header"></di> 
<div id="mainContent"></div> 
<div id="footer"></div> 

js:

$("#content").load("page.php #mainContent"); //that will only load mainContent 

oder:

$.get('page.php', function (data) { 
    data = $(data).find('#mainContent').html(); 
    $("#content").empty().append(data); 
}); 

Weitere Informationen finden Sie im Abschnitt in der jQuery-Dokumentation auf load() and page fragments

+0

Ich habe diese Methode versucht, aber es scheint, dass #mainContent wird zweimal geladen, da alle Seiten alle 3 Divs enthalten. Ich denke, ich muss irgendwie den Inhalt von #mainContent erfassen, bin mir aber nicht sicher, wie es gemacht werden kann. – Emil

+0

@Emil siehe aktualisiert anwser '$ .get ...' – mgraph

+0

Danke, es scheint zu funktionieren, aber einige Javascripts werden nicht richtig geladen. Das muss ich mir etwas später ansehen. – Emil

0

Das t Die Technik, nach der Sie suchen, ist als Hijax bekannt, wo Sie die Antwort von einer AJAX-Anfrage abfangen und nur den Teil des DOM herausziehen, den Sie auf der gerenderten Seite ersetzen wollen.

Die allgemeine Idee ist, dass die tatsächlichen URLs selbst immer noch den vollständigen Seiteninhalt zurückgeben. Wenn also die Anfrage von einem neuen Besucher kommt, wird das gesamte DOM geladen, aber wenn die Anfrage vom Benutzer kommt, klickt ein Hijaxed Wenn Sie auf Ihrer Seite einen CSS-Selektor angeben, wird nur der Teil der Seite ersetzt, der durch den Selektor identifiziert wurde.

Werfen Sie einen Blick auf Hijax - jQuery Plugin. Die eigentliche Website selbst wird mithilfe des Plug-Ins erstellt. Wenn Sie Ihre Netzwerkregisterkarte ansehen und den Inspektor in Ihren Chrome- oder Firebug-Tools anzeigen, können Sie den Inhalt austauschen, ohne die Menüs, die Kopfzeile oder andere Elemente zu ersetzen werden nicht ersetzt.

+0

Es ist sauberer und vernünftiger, '$ .load()' hier zu verwenden - wie mgraph impliziert, kann nur ein Teil einer Seite geladen werden. – Bojangles

+0

Einverstanden, weshalb ich seine Antwort editiert habe, um einen Link zur "load" -Dokumentation zu enthalten und auch upvoted. Für eine Webanwendung ist das 100% der Weg. Der Vorteil der Hijax-Technik besteht jedoch darin, dass Ihr Zurück-Button immer noch funktioniert. Wenn Sie eine Website erstellen, würde ich vermuten, dass Sie wahrscheinlich immer noch möchten, dass Ihre Zurück-Schaltfläche funktioniert, damit das Verhalten nicht verloren geht. – jmort253

1

Es scheint, als ob Sie ein paar verschiedene Optionen haben könnten. Wenn ein Benutzer Ihre Website besucht, aber nicht zur ersten Seite geht, können Sie einfach überprüfen, ob die Kopf- und Fußzeile angezeigt werden, nachdem die Seite geladen wurde. Wenn sie nicht gefunden werden, sollte das ursprüngliche Site-Layout erstellt werden. Sie könnten sogar entscheiden, die erste Seite (index.php) auf diese Weise zu bauen, so dass jede Seite würde

$(document).ready(function() { 
    // If an element of id "header" isn't found in the DOM 
    if (!$("#header").length() > 0) { 
     // Generate the header and insert it as the first element of the DOM 
    } 
    if (!$("#footer").length() > 0) { 
     // Generate the footer and append it to the last element of the DOM 
    } 
}); 

Es gibt keine Zweifel zu anderen Lösungen die gleiche Art und Weise behandelt werden, die Sie auch unterhalten können; Sie könnten wahrscheinlich ein Include auf jeder Seite haben, das nur einbezogen wird, wenn die Seite über eine GET- statt einer AJAX-Anfrage angefordert wird.

Verwandte Themen