2010-03-30 5 views
2

저는 PHP와 Ajax를 처음으로 접하는 경험 많은 프로그래머입니다. 객체 지향 PHP를 내 ajax에 통합하는 방법을 알아 내려는 데 어려움을 겪고 있습니다. webapp.PHP, jQuery, Ajax 객체 지향

관리자 페이지의 사용자 선택에 따라 XML 파일에서 정보 (info.xml)를로드하고 쓰는 관리자 페이지 (admin.php)가 있습니다.

class ContentManager{ 

var $xml_attribute_1 
... 

function __construct(){ 
    //load the xml file from disk and save its contents into variables 
    $xml_attribute = simplexml_load_file(/path/to/xml) 
} 
function get_xml_contents(){ 
    return xml_attribute; 
} 
function write_xml($contents_{ 
} 
function print_xml(){ 
}  
} 

내가 그렇게

<?php 
include '../includes/CompetitionManager.php'; 
$cm = new CompetitionManager() 
?> 
<script> 
    ...all my jquery 
</script> 
<html> 
    ... all my form elements 
</html> 
처럼 admin.php에 ContentManager 객체를 생성 : 나는로드 및 디스크에 XML 파일의 작성, 즉 관리 객체 (ContentManager.php)를 사용하기로 결정했습니다

그래서 지금은 내가 어떻게 생을 이해할 수 있도록

<?php 
    if(_POST[]=="get_a"){ 

    }else if() 
    } 
    ... 
?> 

같은 사용자 인터페이스 (ajax_handler.php)를 사용하여 ContentManger 응용 프로그램을 통해 XML 파일에서 정보를 검색 할 수 있도록 AJAX를 사용하려면 내가 객체를 사용하지 않는다면 작동 할 것입니다. 즉, .post 요청의 변수에 따라 핸들러 PHP 파일이 특정 작업을 수행하지만 설치 프로그램을 사용하면 ContentManager에 대한 참조를 얻는 방법을 알 수 없습니다 내가 admin.php에서 ajax_handler.php 파일로 생성 한 객체? PHP 객체 범위에 대한 제 이해에 결함이있을 수 있습니다.

어쨌든 누구나 내가 무엇을하려고하는지 이해할 수 있다면 도움이됩니다.

답변

1

각각의 아약스 호출을 별도의 요청으로 생각하십시오. 특정 요청의 라이프 사이클에서 ContentManager를 인스턴스화하지 않은 경우 해당 객체가 존재하지 않습니다. 여러 요청간에 하나의 객체를 사용하려면 세션에 직렬화하고 요청 수명주기의 초기에 그것을 deserialize하십시오.

+0

잘 admin.php 파일의 시작 부분에 ContentManager 객체를 인스턴스화했습니다. 따라서 사용자 상호 작용 전체에 양식과 함께 존재해야합니다. – pastylegs

+0

nah ... 아약스 호출 인 경우 완전히 별도의 http 요청입니다. 브라우저가 "posting back"하지 않는다는 사실은 혼란을 야기 할 수 있지만, ajax 요청은 페이지 요청이나 양식 포스트와 같은 라이프 사이클을 따릅니다. 시각적으로보기 힘들다면 Firefox 용 Live HttpHeaders 플러그인을 다운로드하고 ajax 요청이 페이지의 클라이언트에서 서버로 이동하는지 확인하십시오. – Rich

+0

흠, 아마도 이것에 대한 나의 이해는 조금 벗어 났을 것이다. 나는 당신이 Ajax 요청을 할 때 완전히 새로운 http 호출이고 그래서 수명이 짧다는 것을 이해한다. 그러나 admin.php가로드되어서 php 객체를 생성하면 그 PHP 객체가 서버에 무기한 남아 있지 않은가? 참조가 없어지면 즉, 사용자가 페이지에서 벗어날 때까지? 그 동안 모든 Ajax 요청이 해당 객체 – pastylegs

0

이것이 필요한지 잘 모릅니다. 음, 여기 있습니다. 모든 양식 제출을 처리 할 단일 PHP 파일이 있어야합니다. 예 : proc.php 또는 ACTION = "proc.php"에있는 것과 비슷한 것. proc.php 내부에서, 제출 된 매개 변수에 따라 함수 호출을하십시오. 당신이해야 할 또 하나의 일은 클래스 파일 자체의 끝에 클래스의 인스턴스 (객체)를 생성하여 객체가 인스턴스화되었는지 여부를 매번 확인하지 않아도되도록하는 것입니다. 필요한 경우 개체 기능을 호출하기 전에 global $objectname을 사용하십시오.

+0

저는 실제로 ajax_handler.php에서 그렇게했습니다. 문제는 ContentManager PHP 클래스가 별도의 파일이며 ajax_handler.php에 개별적으로 인스턴스화 된 것입니다. – pastylegs

+1

admin.php 대신 ajax_handler.php에 contentmanager 파일을 포함시키고 객체를 사용하십시오. 그게 사실인가요? 아니면 내가 여기서 뭔가를 오해 한 것입니까? –