这个jQuery getJSON AJAX调用的回调方法有问题

时间:2010-11-22 06:12:11

标签: javascript jquery ajax asynchronous callback

我有一个实用程序.js文件,它通过Ajax获取一些数据。现在这个实用程序方法不知道谁会调用它。

因此,当Ajax异步完成时,它需要将一个对象发送回调用者。我不知道该怎么做:(

这是我的代码......

function someMethod(a, b, c) {
    // ... stuff ...

    // Now fire it off, asynchronously!
    var request = $.getJSON(url, function (jsonResult) {
        var result =
        {
            json: jsonResult,
            contentLength: request.getResponseHeader("Content-Length")
        };

        // TODO: Now return this result to the caller.
    });
}

当然,我不能使用return result;,因为这是异步的。我觉得我需要传入一个参数,该参数是上面的ajax代码需要调用的函数,当结果是异步完成时。只是不确定如何...因为记住..这是方法不知道谁在调用它..所以它不知道任何其他方法和东西。

请问任何想法?

1 个答案:

答案 0 :(得分:3)

你是对的。您需要将该函数传递给“someMethod”,以便您可以将数据返回给它。根据回调函数的作用,您可能还需要使用call或apply方法正确设置它的上下文。 “上下文”是回调函数中“this”关键字的设置。

如果你的回调函数没有对关键字“this”进行任何引用,那么你可以忽略call()或apply()的使用,只需调用第二个例子中的函数。 (例如回调(结果));

function someMethod(a, b, c, callback, context) {
    // ... stuff ...

    // Now fire it off, asynchronously!
    var request = $.getJSON(url, function (jsonResult) {
        var result =
        {
            json: jsonResult,
            contentLength: request.getResponseHeader("Content-Length")
        };

        // Now return this result to the caller. With the context set
        callback.call(context, result);

        // Example of callback without setting the context
        //callback(result);
    });
}