티스토리 뷰

웹프로그래밍/js

Prototype responseJSON 사용

공허공자 2009. 3. 11. 12:47
기존 Prototype 을 이용한 ajax 개발시 Aajx.Request 를 사용하고
처리상황을 0 또는 1 과 같이 하거나
임의의 분리자가 섞인 문자열로 사용하곤 했다.

그러다가 보게 된것이 처리 후 리턴값을 JSON 형태로 받아 쓰는것이었다.

[ 클라이언트측 ]

new Ajax.Request(url, {
    method:'get', parameters:pars,
    onSuccess: function(tran) {
        var json = tran.responseText.evalJSON();
        if(json.code == 0) {
            alert(json.msg);
        } else {
            $('row['+ mf_id +']').remove();
        }
    },
    onFailure: function() { alert('오류발생!'); }
});

[ 서버측 : Classic ASP ]

<%
Response.Clear
Response.Expires = -1
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "Cache-Control", "no-store"
Response.ContentType = "text/html"
Response.Charset = "euc-kr"

'// 처리 구문들...

%>

이후에 evalJSON() 이나 toJSON() 들이 Prototype 1.5.1 이하용으로 되어버렸고
그 대신 나온것이 바로 아래와 같은 responseJSON 이다.
변환함수 없이 바로 받아쓸수 있는것이 장점인데,
예전같이 쓰려니 전혀 값이 받아지지 않아서 안쓰고 있다가 파이어준님의 블로그에서 답을 찾았다.
해결책은 바로 서버측의 내용형식 선언에 JSON 을 해주면 된다는것이다.

[ 클라이언트측 ]

new Ajax.Request(url, {
    method:'get', parameters:pars,
    onSuccess: function(tran) {
        var json = tran.responseJSON;
        if(json.code == 0) {
            alert(json.msg);
        } else {
            $('row['+ mf_id +']').remove();
        }
    },
    onFailure: function() { alert('오류발생!'); }
});

[ 서버측 : Classic ASP ]

<%@ CodePage=949 Language="VBScript"%>
<%
Session.CodePage = "949"
Response.CharSet = "euc-kr"
Response.addHeader "pragma", "no-cache"
Response.addHeader "cache-control", "private"
Response.AddHeader "Expires","0"
Response.CacheControl = "no-cache"
Response.ContentType = "application/json"

'// 처리 구문들 ....

%>


상당히 오래 전 찾고, 알게되었던것을 이제서야 정리해본다.
댓글