标题有点奇怪,不太知道用句子来解释它的最佳方式……
目前有一个具有三个函数的对象: funcFailure、funcSuccess和func。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
}
)
我很确定我遗漏了一些明显的东西,只是今天不太明白...
发布于 2013-01-31 22:30:45
如果将回调显式地存储在对象中,这样就不必担心闭包作用域:
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
,因此不需要将其附加到当前对象。
发布于 2013-01-31 22:54:42
您需要将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)
}
};
https://stackoverflow.com/questions/14628124
复制相似问题