2012-04-15 6 views
6

jQuery/AJAX $().load()機能を使用して、私のウェブサイトのコンテンツ領域をリロードします。しかし、私の問題は、headerfooterが、エントリのURLに関係なくすべてのページに表示される必要があるということです。

私のサイトはテンプレートを使用してビルドされているので、最初の考えでは、レイアウトの出力を一意のコンテンツの上と下に削除しました。メニューは2回表示されません。しかし、ユーザーが最初のページから自分のサイトに入っていない場合、index.phpと言うと、ヘッダーやフッターが文字化けしていないテキストページにしか見えません。

私の質問は、この問題を回避する方法です。 JavaScript(+ jQuery)とHTML5は許可されています。

+0

バックエンドにはどのような言語を使用していますか? PHP? Coldfusion? AJAXの読み込みの美しさは、人がどんなページに着いても、AJAXコールの前にあなたが置いたものを手に入れるので、ヘッダー、フッター、メニューなどが既にそこにあることです。以下に述べるように、ページ上のいずれかのコンテナにAJAXレスポンスを読み込むことができます。誰かがメニューをクリックしたときにAJAXを使用してコンテンツを取得している場合は、コンテナ内のHTMLをAJAXレスポンスの新しいコンテンツに置き換えるだけです。 – Lazerblade

+0

エミール;解決策が見つかった場合は、その回答が正しいかどうかを選択する必要があります。それ以外の場合は、変更された内容で質問を更新してください。 – veeTrain

+0

私は、申し訳ありません。私は答えをさらに調査する時間がありませんでした。私はjmort253で作業しようとしていましたが、いくつかのエラーがありました(私はそれについてコメントします)。私の仕事は残念ながら私のサーバーへの接続をフィルタリングしていないので、私がここにいるときは何もする機会がありません。 – Emil

答えて

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 

か:詳細については

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

load() and page fragments

+0

このメソッドを試しましたが、すべてのページに3つのdivがすべて含まれているため、#mainContentが2回読み込まれているようです。私は何とか#mainContentの内容を取得する必要があるが、どうやってそれを行うことができるかはわからないと思う。 – Emil

+0

@Emil更新されたanwserを参照してください。$ .get ... ' – mgraph

+0

ありがとうございます、それは動作しているようですが、いくつかのjavascriptが正しく読み込まれていません。ちょっと後でそれを見ていく必要があります。 – Emil

0

にjQueryのドキュメントのセクションを参照してくださいTあなたが探しているechniqueは、AJAXリクエストからの応答を傍受し、レンダリングされたページで置き換えたいDOMの部分だけを取り出すHijaxとして知られています。

一般的な考え方では、実際のURL自体はフルページのコンテンツを返すため、新しい訪問者からのリクエストの場合はDOM全体が読み込まれますが、リクエストがハイジャックされたリンクが指定されたCSSセレクタでページ上にある場合、セレクタによって識別されたページの一部のみが置き換えられます。

Hijax - jQuery Pluginをご覧ください。実際のサイト自体はプラグインを使用して構築されています。ネットワークタブを見て、ChromeやFirebugツールのインスペクタを見ると、メニューやヘッダなどの要素を置き換えずにコンテンツがスワップアウトされていることがわかります交換されていません。

+0

ここで '$ .load()'を使う方が洗練されていて、もっと賢明です - 答えには、グラフが示すように、ページの一部だけが読み込まれます。 – Bojangles

+0

合意しました。そのため、私は彼の答えを編集して 'load'ドキュメントへのリンクを組み込み、またupvotedしました。 Webアプリケーションの場合、それは100%道のりです。しかし、ヒジャックス技術の利点は、あなたの戻るボタンがまだ動作していることです。あなたがウェブサイトを構築しているのであれば、あなたはおそらくあなたのバックボタンを動作させ、その動作が失われないようにしたいと思うでしょう。 – jmort253

1

さまざまなオプションがいくつかあるようです。ユーザーがサイトにアクセスしても最初のページに移動していない場合は、ページが読み込まれた後にヘッダーとフッターが表示されていることを確認するだけです。それらが見つからない場合は、初期サイトレイアウトを作成する必要があります。すべてのページが同じように処理されるように、あなたも、あなたにも楽しませることができ、間違いなく他の解決方法はありません

$(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 
    } 
}); 

最初のページ(index.phpのに)この方法を構築することを決定することもできます。ページがAJAXリクエストではなくGETでリクエストされた場合にのみインクルードされる各ページにインクルードを含めることができます。

関連する問題