HttpClient 에서 json 값 외부로

—-코드 시작 —–
var test;
var url = ‘http://korea.netau.net/more_info.php?id=’ + id;
var xhr = Ti.Network.createHTTPClient({
enableKeepAlive : false,
onload : function() {
json = JSON.parse(this.responseText);
Ti.API.info(json.more_info[0]);
test = json.more_info[0].email;
},
onerror : function(e) {
Ti.API.debug(“STATUS: ” + this.status);
Ti.API.debug(“TEXT: ” + this.responseText);
Ti.API.debug(“ERROR: ” + e.error);
alert(‘There was an error retrieving the remote data. Try again.’);
},
timeout : 5000,
});
xhr.open(“GET”, url);
xhr.send();
alert(test);

—–코드 끝 ——

위에서 id 에 숫자 1~500 중에 하나 넣으면 값이 json 으로 반환 됩니다.

그 값을 test 안에 넣고 싶습니다.

function myCallback(adData){
//do something with the adData variable
var test =[];
test = adData;
}

var url = ‘http://korea.netau.net/more_info.php?id=’ + id;
var xhr = Ti.Network.createHTTPClient({
enableKeepAlive : false,
onload : function() {
json = JSON.parse(this.responseText);

    data = [{
        email : json.more_info[0].email,
        fax : json.more_info[0].fax,
        latitude : json.more_info[0].latitude,
        longitude : json.more_info[0].longitude,
        membership : json.more_info[0].membership,
        openhours1 : json.more_info[0].openhours1,
        openhours2 : json.more_info[0].openhours2,
        openhours3 : json.more_info[0].openhours3,
        website : json.more_info[0].website,
    }]; 
myCallback(data);

},
onerror : function(e) {
Ti.API.debug("STATUS: " + this.status);
Ti.API.debug("TEXT: " + this.responseText);
Ti.API.debug("ERROR: " + e.error);
alert(‘There was an error retrieving the remote data. Try again.’);
},
timeout : 5000,

});
xhr.open(“GET”, url);
xhr.send();

이렇게 하니 작동 잘되네요 조언해주신분들 감사합니다.

——-more_info.php 코드 소스 ————–
<?php
$mysqli = new mysqli(“xxx”,”xxx”,”xxx”,”xxx”);
if (mysqli_connect_errno()) {
printf(“Can’t connect to SQL Server. Error Code %s\n”, mysqli_connect_error($mysqli));
exit;
}
$json = array();
if($result = $mysqli->query(“SELECT * FROM more_info WHERE id =”.$_GET['id'].”")) {
while ($row=$result->fetch_assoc()) {
$json[]=array(
‘id’=>$row['id'],
‘membership’=>$row['membership'],
‘latitude’=>$row['latitude'],
‘longitude’=>$row['longitude'],
‘website’=>$row['website'],
‘email’=>$row['email'],
‘openhours1′=>$row['openhours1'],
‘openhours2′=>$row['openhours2'],
‘openhours3′=>$row['openhours3'],
‘fax’=>$row['fax'],
);
}
}
$result->close();

header(“Content-Type: text/json”);
echo json_encode(array( ‘more_info’ => $json ));

$mysqli->close();
?>

——-more_info.php 코드 소스 끝————–

——Titanium js 코드 소스 ——————-
var test = [];
var url = ‘http://korea.netau.net/more_info.php?id=’ + id;
var xhr = Ti.Network.createHTTPClient({
enableKeepAlive : false,
onload : function() {
json = JSON.parse(this.responseText);

    data = [{
        email : json.more_info[0].email,
        fax : json.more_info[0].fax,
        latitude : json.more_info[0].latitude,
        longitude : json.more_info[0].longitude,
        membership : json.more_info[0].membership,
        openhours1 : json.more_info[0].openhours1,
        openhours2 : json.more_info[0].openhours2,
        openhours3 : json.more_info[0].openhours3,
        website : json.more_info[0].website,
    }]; 
    test[0] = data;
            Ti.API.info(test[0]);
},
onerror : function(e) {
    Ti.API.debug("STATUS: " + this.status);
    Ti.API.debug("TEXT:   " + this.responseText);
    Ti.API.debug("ERROR:  " + e.error);
    alert('There was an error retrieving the remote data. Try again.');
},
timeout : 5000,

});
xhr.open(“GET”, url);
xhr.send();
alert(test);
——Titanium js 코드 소스 끝———————-
—— json 데이터 출력값 (Ti.API.info(test[0]);———-
INFO : “more_info” = (
INFO : email = test;
INFO : fax = “”;
INFO : id = 1;
INFO : latitude = “36.144347″;
INFO : longitude = “-115.1063″;
INFO : membership = 0;
INFO : openhours1 = tset;
INFO : openhours2 = tset;
INFO : openhours3 = “N/A”;
INFO : website = test;
—— json 데이터 출력값 끝———————–

제가 원하는 결과는 alert(test); 도 같은 결과 값을 받았으면 합니다. 아직까지 callback 을 이해하기에는 실력이 부족한것 같아서 정영석님의 조언으로 해보고 싶습니다.

아래와 같이 하시면 될 것 같은데요. 소스 검증은 안했습니다. ^^

var test;

//호출
getData(100, function(getVal) {
test = getVal || null; // 이렇게 받으시면 되지 않을까요?

// 루프구문이면 루프 돌리시고 이제는 알아서…^^
});

// 함수
function getData(id, callback) {

var xhr = Ti.Network.createHTTPClient();
try {
    xhr.open('POST', 'http://korea.netau.net/more_info.php?id=' + id);
    xhr.send(inParams);
}
catch(e) {
    // 에러 처리
}
xhr.onerror = function() {
    // 에러 처리
};
xhr.onload = function() {
            
    if(this.status == 200) {
        var data = JSON.parse(this.responseText);           
        callback(data);
    } else {
        // 에러 처리
    }
    
};

}