如何让这个JavaScript类成员返回一个值?

时间:2010-05-30 03:15:42

标签: javascript jquery callback

我有一个JavaScript类,它有一个方法:

function someClass() {
    this.someMethod = someClass_someMethod;
}

function someClass_someMethod() {
    // make an AJAX request
}

问题是someClass_someMethod()需要返回AJAX请求的值。

我正在使用jQuery的$.getJSON()方法来获取数据。需要返回数据,但似乎获取数据的唯一方法是通过回调。

如何做到这一点?

3 个答案:

答案 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;
}