2016-12-19 6 views
2

Jquery 라이브러리 및 PHP 서버 측에서 Javascript 클라이언트 측을 사용하여 웹 애플리케이션을 개발 중입니다. 나는 AJAX를 광범위하게 사용했고 링크 요소에 어떤 href 속성도 사용하지 않았습니다. 홈 페이지 만 0에서로드됩니다. 다른 것들은 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의 스 니펫 (snippet)을 반환하는 것은 frontpage가 요청하지 않는 한 가능합니까? 요청이 AJAX를 사용하여 만들어진 경우 서버 측 (.php 코드에서)을 감지 할 수 있어야합니다. 그렇다면 HTML 스 니펫을 반환하고 그렇지 않으면 전체 페이지를 반환합니다. – HaukurHaf

+0

@HaukurHaf 좋은 해결책이 될 수 있지만 어떻게하면 스푸핑 문제없이 아약스 요청인지 확인할 수 있습니까? 그게 유일한 해결책입니까? 또는 나는 무엇인가 놓치고 있냐? – Ricla

+0

코드 또는 텍스트로 링크를 처리하는 방법을 처음 보여줄 수 있다면 전체 방법을 작성하겠습니다. – CJxD

답변

0

간단하게 유지하십시오. 검색 HTML을 반환하는 다른 경로를 추가하기 만하면됩니다. 예 :

/search - 전체 렌더링 된 검색 페이지를 반환합니다. /getSearchHtml - 필요한 HTML 스 니펫 만 반환합니다.

경로에 혼동을 피하는 데 도움이됩니다.

+0

그러나 getSearchHtml 페이지에있을 때 브라우저 새로 고침 버튼을 클릭하면 동일한 문제가 발생합니다. – Ricla

+0

@Ricla : 사용자가 검색 페이지를 필요로하면/검색으로 이동합니다. AJAX가 검색 페이지를 필요로하면/getSearchHtml을 사용하거나/get/search를 사용하는 것이 더 좋은 아이디어 일 수 있습니다. 문제는 이것이 확장 성이 뛰어난 해결책이 아니라는 것입니다. 문제는 검색뿐 아니라 모든 페이지에 있습니다. – CJxD

+0

@CJxD 예, 확장 가능한 솔루션이 아닙니다. 또한, 사용자가 AJAX 요청 후 페이지를 새로 고치면 (이 경우 url은/getSearchHtml 임), 나는 AJAX 응답 만받습니다. 대신 전체 페이지를 가져와야합니다. – Ricla

2

그냥 세 페이지

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

으로 인덱스 페이지를 끊고 인덱스 페이지에 그들을 포함

<?php 
include_once 'header.php'; 
include_once 'content.php'; 
include_once 'footer.php'; 
?> 

및 검색 페이지와 pu에서 동일하게 수행하십시오. 상태 t의 머리글과 바닥 글 페이지

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

지금 아약스 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

또한 동일한 페이지에 두 개 이상의 콘텐츠를로드하면 처리하기가 어려워집니다. – Ricla

0

당신은

  1. 헤더
  2. 바디
  3. 바닥 글

변경 할 수 있습니다 본문에 내용과 헤더로 어떤 프레임 워크를 사용하여 일반적인 레이아웃을 사용할 수 있습니다, 바닥 글은 일반적인 것입니다. 검색 버튼을 클릭하면 아약스 코드가 '본문'부분에로드됩니다. '/ 검색'페이지를 별도로 열어도 일반 머리글과 바닥 글이로드됩니다.

ajax 코드는 '/ search'페이지의 일부이므로 검색 페이지와 ajax 파일에 별도의 이름을 지정해야합니다. 별도로 액세스하려면 공통 레이아웃을 사용해야합니다. 전체 페이지의 조합.

+0

내 HomePage는 이미 머리글, 본문 및 바닥 글에 분할되어 있습니다. Body에는 다른 div가 포함되어 있습니다. AJAX 응답은 이러한 div 또는 본문 중 하나를 대체 할 수 있습니다. – Ricla