var JsonObj = {};
if (Titanium.Network.online) {
apiHelper.APIPostRequest(APIURL + '/it', tempJSON, function(e) {
var status = this.status;
if (status == 200) {
JsonObj = JSON.parse(this.responseText);
//behaves as expected
//console.log(JsonObj);
}
}, function(err) {
alert('Unknown error from api');
});
} else {
alert('No internet connection found');
}
console.log(JsonObj);
当我从函数作用域中打印它时,它会返回一个空的json对象,如果我在函数中执行它,则会使用相关数据填充它。
我创建了一个非常简单的JS文件,测试范围问题并且它可以工作:
var i=5;
if(i>3){
if(i>4)
{
i = 6;
}
}
alert(i);
答案 0 :(得分:0)
这很可能与您的功能范围无关。
在发出请求的大多数常见场景中,您都是异步执行,这意味着您的console.log在您发出请求后立即执行,您在请求中提供的功能仅在您收到响应时执行...(异步) )
因此,当您在底部写出对象时,该对象尚未设置。由于回调函数尚未执行。
我非常期待apiHelper.APIPostRequest符合这种模式。但由于我不了解任何这些框架,我无法肯定地说,但是用它们的方式你也可以描述错误......这是我能看到的唯一显而易见的事情。
var JsonObj = {};
console.log("Before Async Request: " + JsonObj);
if (Titanium.Network.online) {
apiHelper.APIPostRequest(APIURL + '/it', tempJSON, function(e) {
var status = this.status;
if (status == 200) {
JsonObj = JSON.parse(this.responseText);
console.log("Inside Async Callback: " + JsonObj);
//behaves as expected
//console.log(JsonObj);
}
}, function(err) {
alert('Unknown error from api');
});
} else {
alert('No internet connection found');
}
console.log("After Async Request: " + JsonObj);
你也可以马上开始学习Promises ......例如Q应该是这样的:
var deferred = Q.defer(),
JsonObj = deferred.promise;
if (Titanium.Network.online) {
apiHelper.APIPostRequest(APIURL + '/it', tempJSON, function(e) {
var status = this.status;
if (status == 200) {
deferred.resolve(JSON.parse(this.responseText));
}
}, function(err) {
deferred.reject(err);
});
} else {
alert('No internet connection found');
}
JsonObj.then(function(json) {
console.log("After Async Request: " + json);
});