2016-12-19 4 views
2

私はJaveryクライアントとPHPサーバー側でJavascriptクライアント側を使用してWebアプリケーションを開発しています。私はAJAXを幅広く使用しており、リンク要素にはhrefという属性を使用していません。ホームページのみがゼロからロードされます。他はAJAX呼び出しによって要求され、AJAX応答はJquery .html()関数を使用してホームページに挿入され、新しいページを表示します。Ajaxレスポンスフラグメント

問題は私がhttp://sani.com/index.phpを実行すると、私はホームページを取得します。検索ボタンをクリックすると、http://sani.com/searchページが表示されます。しかし、私がアドレスバーにhttp://sani.com/searchを実行した場合、AJAXレスポンスしか得られないので、コンテンツはホームページ内に配置され、http://sani.com/searchページ全体ではありません。

アドレスバーでこのURLを実行すると、完全なhttp://sani.com/searchページを取得するにはどうすればよいですか?私は間違って何をしていますか?

+0

したがって、HTMLのスニペットは、フロントページが要求されない限り返されますか?要求がAJAXを使用して作成された場合は、サーバー側(.phpコード内)で検出できるはずです。その場合はHTMLのスニペットを返し、そうでない場合はページ全体を返します。 – HaukurHaf

+0

@HaukurHafこれは良い解決策になるかもしれませんが、問題を偽造することなくajaxリクエストがあるかどうかをどのように確認できますか?それが唯一の解決策ですか?または私は何かを逃していますか? – Ricla

+0

コードやテキストでリンクをどのように扱うかを最初に見せることができれば、完全な方法を書いておきます。 – CJxD

答えて

0

簡単にしてください。検索htmlを返す別のルートを追加するだけです。 例:

/search - レンダリングされた検索ページ全体を返します。 /getSearchHtml - 必要なHTMLスニペットを返します。

あなたのルートに混乱を避けるのに役立ちます。

+0

しかし、私が/ getSearchHtmlページにいるときに私がブラウザのリフレッシュボタンをクリックすると、私は同じ問題を抱えています。 – Ricla

+0

@Ricla:ユーザーが検索ページを必要とする場合は、/ searchに移動します。 AJAXに検索ページが必要な場合は、/ getSearchHtmlを使用するか、/ get/searchを使用するほうが良いでしょう。問題は非常にスケーラブルな解決策ではないということです。問題は検索だけでなくすべてのページに表示されます。 – CJxD

+0

@CJxDはい、スケーラブルな解決策ではありません。さらに、ユーザーがAJAXリクエスト(この場合はurlは/ getSearchHtml)の後でページをリフレッシュすると、AJAXレスポンスしか得られません。代わりに私は全体のページを取得する必要があります。 – Ricla

2

わずか3ページ

  • header.phpの
  • content.php
  • footer.php

とインデックス・ページ上でそれらを含める

<?php 
include_once 'header.php'; 
include_once 'content.php'; 
include_once 'footer.php'; 
?> 
にあなたのインデックスページを破ります

と同じように検索ページとpu条件でのトンのヘッダーとフッターのページ

<?php 
if(empty($_GET['htmlOnly'])) include_once 'header.php'; 
include_once 'content.php'; 
if(empty($_GET['htmlOnly'])) include_once 'footer.php'; 
?> 

今、あなたのAJAXのURLがなるhttt:?//abc.com/search htmlOnly = 1、それが唯一のコンテンツ部分

をロードし、 なしだろう「htmlOnly = 1 "httt://abc.com/searchはHTMLページ全体を読み込みます。

+0

おそらく 'include_once'の必要はないでしょうから、パフォーマンス上の影響があると考えると' include'だけに置き換えてください。 – CJxD

+0

この場合、httt://abc.com/search?htmlOnly = 1ページを更新すると、サーバーからのAJAX応答しか得られないので、同じ問題が発生します。 – Ricla

+0

また、同じページに2つ以上のコンテンツを読み込むと、扱いにくくなります。 – Ricla

0

あなたは

  1. ヘッダ
  2. ボディ
  3. フッター

変更される可能性があり、体内のコンテンツとヘッダといくつかのフレームワークを使用して、共通のレイアウトを使用することができ、フッタは共通であろう。 検索ボタンをクリックすると、 'body'部分にajaxコードがロードされます。 '/ search'ページを別途開くと、共通ヘッダーとフッターがロードされます。

検索ページとajaxファイルに別々の名前を付ける必要があります.Ajaxコードは '/ search'ページの一部に過ぎないため、別々にアクセスするには共通レイアウトを使用する必要があります全ページの組み合わせ。

+0

My HomePageは、すでにヘッダー、ボディー、フッターに分割されています。 Bodyには他のdivが含まれています。 AJAXレスポンスは、これらのdivの1つまたはボディを置き換えることができます。 – Ricla