json 을 사용했을 경우 IE 의 보안을 낮추면 jsonp 를 사용하지 않고도 가능합니다.
(과연... 사용자가 보안을 낮출지... ㅎㅎ)


// --------------------------------------------------------------------------
// other.com json.php
<?php
function arr2json($arr){
    foreach($arr as $k=>$val) $json[] = '"'.$k.'"'.':'.php2js($val);
    if(count($json) > 0) return '({'.implode(',', $json).'})';
    else return '';
}
function php2js($val){
    if(is_array($val)) return arr2json($val);
    if(is_string($val)) return '"'.addslashes($val).'"';
    if(is_bool($val)) return 'Boolean('.(int) $val.')';
    if(is_null($val)) return '""';
    return $val;
}

$arr = array ('a'=>$_GET["a"],'b'=>$_GET["b"]);
echo $_GET["jsoncallback"].arr2json($arr);
?>



// --------------------------------------------------------------------------
// jsonsend.php

$(document).ready(function() {
    $('#send').click(function() {
        $.ajax({
            url: 'http://other.com/json.php?jsoncallback=?',
            data: {
            a: a_site_data,
            b: a_email_data
            },
            type: 'get',
            dataType: 'jsonp',
            jsonp : 'jsoncallback',
            error: function() {
              alert('Ajax failure');
            },
            success: function(response) {
            alert('신청이 완료되었습니다.'+response.b);
            }
        });
    }).css({cursor:'pointer'});
});


아래 두가지 방법은 안해봐서 정확히 모르겠지만...
이렇게도 하는거 같더군요. 위에가 복잡하다고 느껴지시면 아래처럼 시도해보세요 ^^;

$.get('http://www.other.com/Service.svc/GetToJson?callback=?', function (data) {
    alert(data);
}, 'jsonp');


$.getJSON('../../Services/Service.svc/GetToJson', function (data) {
    alert(data);
});


중요한건 서버단에서 데이터 전송할때 아래와 같은 형식으로 되어야 한다는겁니다.
jsonp1271738777234({"a":"webst.kr","b":"12333"})


이건 번외인데요.
ajax 디버깅 할때 오류도 안나오고 어찌해야 할지 모를때 아래 툴을 설치하셔서 사용하시면 좋더군요.

http://www.fiddler2.com/fiddler2/

1. 설치하고 실행합니다.
2. IE를 실행하고 웹사이트에 접속합니다.
3. ajax 통신을 시도합니다.
4. 프로그램에서 데이터의 전송이 보이는데 이것을 활용하면 됩니다.

이 프로그램 모를적엔 어떻게든 데이터 넘겨주는 파일에서 값좀 찍어볼라고 힘들었는데...
이제 그럴 필요가 없어졌네요 ^^;
2010/06/01 09:54 2010/06/01 09:54

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다