我有一个JavaScript类,它有一个方法:
function someClass() {
this.someMethod = someClass_someMethod;
}
function someClass_someMethod() {
// make an AJAX request
}
问题是someClass_someMethod()
需要返回AJAX请求的值。
我正在使用jQuery的$.getJSON()
方法来获取数据。需要返回数据,但似乎获取数据的唯一方法是通过回调。
如何做到这一点?
答案 0 :(得分:1)
您可以使用非异步请求,但在请求处于运行状态时会占用浏览器。
回调是唯一的方法,因为您需要等待任意数量的时间才能使请求成功或出错。
答案 1 :(得分:1)
我不建议担心从头开始编写AJAX时可能出现的所有跨浏览器问题,而是建议使用像jQuery这样的行业标准框架来处理您当前正在执行的请求。正如Delan Azabani所指出的那样,它是异步的,这是异步通信新手的常见请求。
function someClass_someMethod(callback) {
$.getJSON(..., function(data) {
// process the data here...
callback(data);
);
}
你现在可以这样做:
var someClass = new someClass();
someClass.someMethod(function(data) {
... handle your preprocessed data here ...
});
本答案中没有新概念,仅提供代码示例。
答案 2 :(得分:1)
在此代码中someClass_someMethod
将发出非异步请求并返回该值。因此,在请求结束之前不执行任何操作,允许您返回值。
function someClass() {
this.someMethod = someClass_someMethod;
}
function someClass_someMethod() {
var ret = {};
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
ret = data;
},
async: false
});
return ret;
}