标题有点奇怪,不太清楚用句子解释它的最好方法......
目前有一个具有3个功能的对象; func,funcSuccess和funcFailure。 func包含一个jQuery ajax请求,this.funcSuccess作为成功回调,funcError作为错误回调。 func被传递回传给任何成功值以传回,但是这个回调需要在funcSuccess代码中执行。
以下是代码:
var Obj =
{ func: function (callback) {
$.ajax(
{ type: 'POST'
, url: '/func'
, success: this.funcSuccess
, error: this.funcError
}
)
}
, funcSuccess: function (res) {
// THIS IS WHERE CALLBACK IS NEEDED
callback(res.thing)
}
, funcError: function (res) {
debug(res)
}
}
我想知道是否有更简洁的方法来做而不是:
var that = this
$.ajax(
{ type: 'POST'
, url: '/func'
, success: function (res) {
that.funcSuccess(res)
}
, error: this.funcError
}
)
很确定我错过了一些显而易见的东西,今天还没有用它......
答案 0 :(得分:1)
如何将回调显式存储在对象中,这样您就不必担心闭包范围了:
var Obj =
{ func: function (callback) {
//this.callback = callback;
$.ajax(
{ type: 'POST'
, url: '/func'
, success: $.proxy(this.funcSuccess, this, callback)
, error: $.proxy(this.funcError, this)
}
)
}
, funcSuccess: function (callback, res) {
callback(res.thing)
}
, funcError: function (res) {
debug(res)
}
}
编辑:我忘了将回调绑定到this
。在JQuery中,您可以使用$.proxy
执行此操作,请参阅上面的更改。
编辑:进一步整洁(jQuery 1.6允许此操作)将回调作为参数传递给$.proxy
,因此无需将其附加到当前对象。
答案 1 :(得分:0)
您需要将callback
传递给funcSucess
,否则无法访问它。这里使用闭包:
var Obj = {
func: function (callback) {
return $.ajax({
type: 'POST',
url: '/func',
success: this.makeFuncSuccess(callback),
error: this.funcError
});
}, makeFuncSuccess(callback) {
return function funcSuccess (res) {
callback(res.thing);
};
},
funcError: function (res) {
debug(res)
}
};