我有一个实用程序.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代码需要调用的函数,当结果是异步完成时。只是不确定如何...因为记住..这是方法不知道谁在调用它..所以它不知道任何其他方法和东西。
请问任何想法?
答案 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);
});
}