묻고답하기
ajax 호출을 통한 내용 조회
2010.01.21 18:48
모듈을 개발해 보고자 하니 여기 저기서 모르는게 너무 많네요
ajax 호출을 통해서 내용을 조회해보려고 합니다.
간단히 jQuery를 이용해서 아래와 같이 해보았더니...
jQuery("#dialog_marklist").load(url,{},function(){
alert( jQuery("#dialog_marklist").html() );
} );
예상히지 못하게.. 당연히 Layout, Skin이 적용된 결과가 왕창 날아옵니다.
그렇 어떻게 해야할까 한참을 고민하다가
Filter가 Ajax로 동작하는 것 같아 Member 모듈의 로그인 기능의 소스를 확인해보니
<form action="./" method="post" onsubmit="return procFilter(this, login)" id="fo_member_login">
댓글 3
-
라르게덴
2010.01.21 19:17
-
봉이지비
2010.01.22 09:41
[라르게덴]님 답변 감사드립니다. 답변에 의해 확인한 사항을 올려드립니다.
ajax 요청시 아래와 같이 exec_xml() 함수를 이용합니다. (common/js/xml_handler.js 파일에 있음)
function test(){
var params = new Array();
params["변수명"] = ”값”;
var response_tags = new Array('error','message','results'); // 결과로 받을 값을 지정해야 함exec_xml("모듈","act명", params, complete, response_tags );
}
서버측 act을 처리하는 곳에서는
function 엑션명(){
.....
$this->add("results", "1,2,3,4,5"); //results 변수에 결과 값을 넣어줌}
$this->add()한 내용이 어떤 과정으로 결과로 전송되는지는 시간관계상 파악하지 못했습니다.
결과를 리턴받는 Callback 함수에서는 이렇게 처리합니다.
function complete(ret_obj, response_tags ){
var message = ret_obj["message"]; // message, error는 response_tags를 지정하지 않아도 받을 수 있으나
var error = ret_obj["error"];
var A = ret_obj["변수명"]; // 별도 지정 변수는 response_tags를 지정해야만 결과를 받를 수 있음}
별도로 값을 전달받지 않을 경우에는 response_tags를 지정하지 않아도 되지만
값을 전달받기 위해서는 이게 필요한 것 같습니다.
이렇게 전송되는 값은 아래와 같은 형태의 xml로 전송되어 index.php 가 받아서 처리하게 됩니다.
<?xml version="1.0" encoding="utf-8" ?>
<methodCall>
<params>
<q><![CDATA[]]></q>
<module><![CDATA[phmapxe]]></module>
<act><![CDATA[getPhmapxeMarkList]]></act>
</params>
</methodCall>
결과 값도 xml로 리턴되는데 아래와 같은 형태를 띠고 있습니다.<response><error>0</error><message>success</message><results><![CDATA[1,2,3,4,5]]></results></response>xml 결과값은 exec_xml()함수에 의해 처리되어 callback함수로 전달됩니다.jQuery.post()를 이용해서 동일한 형태로 구현해보고자 하다가 그만 둡니다. -
시니시즘
2011.05.30 10:55
담아갑니다.
function test(){
var params = new Array();
params["변수명"] = ”값”;
exec_xml("모듈","act명", params, complete);
}
function complete(ret_obj){
var message = ret_obj["message"];
var error = ret_obj["error"];
var A = ret_obj["변수명"];
{
filter.xml 로 하지 않았을 경우에는 exec_xml이란걸 이용해 ajax 식으로 처리해서 결과를 받을 수 있는데요.
님이 지금 바라고자 하는 내용은 간단히 이곳에서 설명되긴 어렵습니다.
XE 코어 프로젝트에 가셔서 xml js filter 라는 부분을 공부하시고요.
function procMemberLogin($user_id = null, $password = null, $keep_signed = null)
이런 함수를 호출 한뒤에 마지막에는 $this->add("act","act명"); 이란 것을 이용해 complete(ret_obj)로 값이 전달 됩니다.
error의 경우는 실패할 경우 각 해당 함수에서 에러를 발생시켜서 하는 것이고 꼭 들어가 있을 필요는 없다고 봅니다.
중요한건 message 라는 부분은 $this->setMessage($msg_code); 이런걸 통해서 대부분 사용하더라고요.