【发布时间】:2016-03-30 04:24:46
【问题描述】:
我正在迁移到 jQuery 1.8 并将我的 ajax 结果处理程序从 success: 和 error: 更改为 done() 和 fail()。
但是,在我的 done() 处理程序中,我开始收到类似
this.each is not a function
虽然 ajax 调用和以前一样包含context: 参数。不知何故,this 上下文消失了。
这是调用代码:
function vzload(args) {
return $.ajax(args).then(function(json) {
if (json.exception) {
var e = new Exception(json.exception.type, args.url + ':<br/><br/>' + json.exception.message);
vz.wui.dialogs.exception(e);
return $.Deferred().reject();
}
return $.Deferred().resolve(json);
});
}
这是发生错误的时候:
var deferred = vz.load({
controller: 'capabilities',
context: someobject
}).done(function(json) {
this.each(...)
});
我已尝试将分辨率更改为:
return $.Deferred().resolveWith(this, json);
现在错误是
TypeError: json is undefined
使用上下文对象时修改ajax结果Deferred的正确方法是什么?
【问题讨论】:
-
I'm migrating to jQuery 1.8 and changing my ajax result handlers from success: and error: to done() and fail()您不需要需要这样做 -success和error仍然完全有效。另外,如果你正在升级 jQuery,为什么不去 1.x 分支上的最新版本呢? -
@Rory 我需要一种方法来根据 json 响应内容将成功结果修改为失败 - Deferreds 似乎是实现这一目标的“正确”(也是唯一?)方法。
-
只需将处理错误的功能提取到它自己的函数中,这样您就可以在满足条件时从
error和success调用它。 -
@andig:不管罗里怎么说,你是对的
-
为什么需要在回调中使用
this?为什么不直接打电话给someobject.each?似乎是最好的方法 (but there are alternatives if you want)