应该是这样的:
function getJson(url, callback) {
Ti.API.info(" im here " + url);
var jsonObject, xhr = Ti.Network.createHTTPClient();
xhr.setTimeout(3000);
xhr.onload = function() {
var jsonObject = JSON.parse(this.responseText);
callback(jsonObject)
}
xhr.open("GET" , url);
xhr.send();
Ti.API.info(" passed ");
}
function acallback(json) {
Ti.API.info("data from ajax: " + json);
}
getJson(url , acallback);
注意,我删除了使用的eval因为它是不好的做法,使用,因为它说(here):
eval函数速度非常快。但是,它可以编译并执行任何JavaScript程序,因此可能存在安全问题。当来源是可信和有效的时候指示使用 eval。使用JSON解析器更安全的多 。在通过XMLHttpRequest的Web应用程序中, 通信只允许与提供 页面的相同源,因此它是可信的。但它可能无法胜任。如果服务器 的JSON编码不严格,或者如果它没有严格地验证其所有输入,那么它可能会传递无效的JSON文本 ,这可能会携带危险的脚本。 eval函数 执行脚本,释放其恶意。
此外,你最好每范围使用VAR关键字只有一次。
编辑
如果您想使用所产生的JSON对象从回调的范围之外,只要定义回调在需要json的范围,例如:
var obj = {
x: 4,
doit: function() {
var _this = this;
var callback = function(json) {
alert(_this.x * json.y);
};
getJson(url , callback);
}
}
json.y第一部分我刚刚做了一些例子。
第二编辑
另外,如果你想使用呼叫选项,你可以这样做:
function getJson(url, callback, bindto) {
Ti.API.info(" im here " + url);
var jsonObject, xhr = Ti.Network.createHTTPClient();
xhr.setTimeout(3000);
xhr.onload = function() {
var jsonObject = JSON.parse(this.responseText);
callback.call(bindto, jsonObject)
}
xhr.open("GET" , url);
xhr.send();
Ti.API.info(" passed ");
}
var obj = {
x: 5
}
function myCallback(json) {
alert(this.x * json.y);
}
getJson(url, myCallback, obj);
第三届编辑
如果我们”关于这个问题,我推荐使用一个很好的技巧,它在中使用210,MooTools,jQuery并根据MDN是Introduced in JavaScript 1.8.5。
Function.prototype.bind = function(scope) {
var _function = this;
return function() {
return _function.apply(scope, arguments);
}
}
您可以阅读tutorial我从哪里复制到的代码。
我不需要登录的价值,我需要使用它实际和超出范围的回调() – 2012-02-26 19:05:04
我编辑了我的原始答案与如何可以完成。 – 2012-02-26 19:09:54
*“你最好每个范围只使用一次var关键字。”*为什么? – 2012-02-26 19:12:40