2011-09-02 6 views
1

현재 PHP로 자체 MVC 프레임 워크를 만들고 있습니다. 페이지가 URI 그래서 URI가 라우터를 통해 전달되는PHP에서 MVC로 Ajax 요청을 처리하는 방법

을 www.domain.com/controller/method/params 사용하여 구축

나는 ...하지만 Ajax 요청을 처리하는 방법을 알아 내려고 노력하고 있어요 클래스를 사용하여 컨트롤러와 메소드 + 매개 변수를 사용합니다.

이것은 좋은 것으로 들리지만 머리글과 바닥 글, 실제 페이지에도 사이드 바가 있으며 MVC가 페이지의 주요 내용 부분을 채울 것입니다.

그래도 Ajax 요청을 할 때, 예 www.domain.com/user/create하기 : 컨트롤러 = 사용자 방법 = 생성

는 요청을 전송하기 때문에 나는 다시 전체 페이지를 구축하려고 할 것 내 앱에.

제대로 처리하는 방법에 대해 혼란스러워합니까?

+0

어쩌면 내가 너를 이해하지 못하고 있지만 페이지를 만드는 행위가 방법 (또는 여러 가지 방법)이되어서는 안됩니까? 그렇다면 왜 사용자 -> 생성이 실제로 페이지를 작성하는 것과 관련이 있는지 알 수 없습니다. 나는 몰라, 나는이 보트를 완전히 놓칠지도 모른다. 그래서 나는 입을 다물 것이다. :) – Herbert

+0

당신이 사용하고있는 MVC 프레임 워크를 명시 해 주실 수 있습니까? – Vins

+0

@Vins - 그는 자기 자신을 만들고 있다고 말했다. – Galen

답변

3

여기에 몇 가지 불완전한 답이있다 렌더링을 중지합니다. 여기 당신이 어떻게하는지, 아주 간단합니다 ...

당신이 할 일은 AJAX 헤더를 확인하고 그것을 기반으로 다른 내용을 제공하는 것입니다. 아약스 헤더는 다음과 같습니다

$_SERVER['HTTP_X_REQUESTED_WITH'] 

이 그것은 AJAX 요청을 XMLHttpRequest로 설정됩니다. 이것은 표준 인이며 모든 주요 자바 스크립트 라이브러리가 뒤 따른다.

나는 www.domain.com/user/create에 불구하고 Ajax 요청, 예를 걸 때 : 컨트롤러 = 사용자 방법 = 그래서

을 만들이 우리가 AJAX 헤더를 확인할 수 있습니다 알고를 귀하의 방법에 따라 출력을 표시하십시오.

function create() { 

    // code to create user 

    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
     // return new user id in json format (xml) 
     die(json_encode(array('user_id' => $new_user_id))); 
    } 

    // load views hear 
} 
+0

이 점을 이해하지만 어디에서 내 페이지 템플릿 - 머리글 꼬리말 등을 만들어야합니까? – JasonDavis

+0

제 코드에서 if 문 바로 다음에 뷰를 빌드 할 것입니다. AJAX 요청은 if 문에서 스크립트를 죽였다. – Galen

1

실제로이 작업 방법과 관련하여 어떤 프레임 워크를 사용하는지에 따라 달라 지지만 일반적으로 내가하는 일은 전체 내용보기를 렌더링하는 것이 아니라 필요한 작은 내용을 출력하는 것입니다.

그래서 ajax를 통해 사용자를 생성하는 경우, 사용자가 성공하면 정수로 반환 할 수 있습니다.

그래서 : 당신이 가져올 위치를

정상적인 전체 페이지 작업에 비교 (즉, 생성 된 기본 키 인 경우)

class User { 
public function create(){ 
    $uid = //create user in database return primary key 
    echo $uid; 
    exit; //we stop execution here so we don't render the full layout 
} 
} 

그래서 요청에 대한 당신의 문자 그대로의 응답은 "9"가 될 것입니다 및 레이아웃의 각 compontent은 다음 예를 들어로드 한 특정 페이지 뷰를 렌더링 :

내가 그것을 처리하는 방법 일반적이다
class Home { 
public function index(){ 
    $homeView = //loadHomeView 
return $homeView 
} 

, 이것은 실제 코드가 아니라 포인트를 가로 질러 가야한다.

+0

그래, @Aknosis는 말했다. :) (컨텍스트에 대한 질문에 내 의견을 참조하십시오) +1 – Herbert

0

사용중인 프레임 워크를 지정할 수 있습니까?

일부 표준 프레임 워크를 사용하는 경우 프레임 워크에 ajax 요청을 사용하려면 cakephp과 같은 기본 레이아웃 ajax이 필요합니다. 에서 json 문자열 또는 xml 문자열을 전달하기 위해 $this->autorender = false과 같은 것을 사용할 수 있습니다.

0

사용 die() 또는 exit() 전 코드 실행 및 모든 페이지

+0

그냥 조금 FYI : 출구는 구조이므로 괄호를 포함 할 필요가 없습니다. die; 또는 출구; 둘 다 작동합니다. 종료 할 매개 변수를 제공하면 스크립트의 종료 상태 (명령 행에서 실행중인 경우)가되며 종료 할 매개 변수는 종료 직전에 출력으로 표시합니다. – Aknosis

관련 문제