如何修改jQuery的ajax()结果在使用上下文对象时延迟

时间:2015-12-23 17:15:40

标签: jquery promise

我正在迁移到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结果的正确方法是什么?使用上下文对象时延迟?

1 个答案:

答案 0 :(得分:0)

亲爱的,亲爱的。似乎我在两种情况下都犯了同样的错误。根据{{​​3}},函数期望args作为数组,而不是单个普通参数。只有在第一种情况下,即使在json没有被定义之前,这个错误也会被失败所覆盖。

所以&#34;对&#34;方式似乎是:

return $.Deferred().resolveWith(this, [json]);