2009-10-04 3 views
2

표준 PHP 프로젝트를 OOP로 변환하려고하는데 PHP 클래스로 AJAX 호출을 처리하는 방법에 관한 벽을 쳐다 보았다. 나는 지금이 일을하는 방식에 만족하지 않습니다. TillUI.php 파일에서 AJAX 호출로 호출하는 TillAjax.php 파일이 있습니다.PHP OOP 및 AJAX : Class에서 서버 측 처리 방법

TillAjax.php 파일에서 나는 ajax 호출에서 전달 된 정보를 얻기 위해이 작업을 수행합니다.

$till = new Till(); 
if(isset($_POST['data'])) 
    $till->doStuff($_POST['data']); 

나는 이것이 OOP를 파괴한다고 생각한다.

나는 ASP.NET MVC와 함께 작업했으며 여기서는 게시 값을 확인하지 않고도 컨트롤러에서 특정 작업을 호출 할 수 있습니다. 그래서 위의 문제를 해결하는 더 똑똑한 PHP 방법이 있는지 알고 싶습니다.

답변

6

여기에서 사용하는 방법은 Ajax 클래스를 사용하는 것입니다.

PHP 파일은 Ajax::Process($_GET['handle'])을 호출합니다. 여기서 'handle'에는 정적 클래스 메소드의 이름이 포함되어 있으므로 'Till :: Process'가 될 수 있습니다. Ajax 클래스는 허용 된 함수 목록 (즉, ajax를 통해 호출 할 수있는 함수)에 대해 함수를 확인한 다음 call_user_func_array을 사용하여 함수를 호출합니다. (내 코드는 $ _POST의 내용을 인수로 사용하여 함수에 전달합니다.). 이 함수의 반환은 자동으로 json으로 인코딩되어 클라이언트로 출력됩니다.

이 당신의 목표 PHP 파일은 다음과 같습니다 것을 의미한다 : 내가 생각

<?php 

//File: ajax.php 

include ("Ajax.php"); 

Ajax::Process($_GET['handle']); 

?> 

은 아주 간단합니다.

$.get('ajax.php?handle=Till::Process', {}, function(result) { 
    //called on page response 
}); 

은 그럼 이제 결과 틸 :: 프로세스는 PHP 메서드에서 반환되는 어떤 데이터가 포함

그런 다음이 (JQuery와)과 같은 자바 스크립트를 가질 수 있습니다.

+0

+1 유효성 검사가있는 간단한 입력 양식의 경우 결과를 반환하는 validate()와 결과를 나타내는 validateAjax의 두 가지 기능을 수행 할 필요가 없습니다. Ajax :: validate가 올바르게 리턴하는 것을 반향시킬 수 있습니까? – imperium2335

+0

그래, 내가 사용한 적이 있지만 JSON을 HTML이 아닌 ajax 함수에서 출력하는 방법이있다. 분명히 AJAX 호출이 완료되면 HTML을 출력하고 표시하는 함수를 호출 할 수 있습니다. – Kazar

+0

정적이 아닌 메소드를 호출하려면 다음과 같이하십시오 : $ .get ('ajax.php? handle = class-> method'... ... – imperium2335

1

CodeIgniter, CakePHP, Kohana 등과 같은 PHP MVC 프레임 워크를 사용해 보셨습니까? 요청을 특정 컨트롤러 메소드로 라우트 할 수있게 해줍니다. 이러한 프레임 워크 중 하나로 마이그레이션하는 것이 옵션 일 경우 훨씬 더 깔끔한 솔루션이 될 것입니다.