使用resolve(arg)Javascript / Odoo无法获得Ajax结果

时间:2014-10-07 16:29:40

标签: javascript ajax promise jquery-deferred deferred

正如标题中所提到的,当我将参数传递给resolve(args)时,我无法从Ajax请求中捕获结果。我得到了我通过resolve()传递的args。

// kind of Ajax call in Odoo software
var d = new instance.web.Model('advanced.search')
.call('check_duplication', ['paul']).done(function (name) {
    // expected name 'example', but got 'my_var' instead...
    return name
});

d.resolve('my_var');

你能告诉我如何管理吗?

非常感谢。

PS:所有答案的人都是。我会尝试更具体。 我实际上扩展了一个对象,接收到的参数我用它来调用服务器端然后等待结果。一旦我得到结果,我想调用super并传递新的参数。

MyObject.extend({
init: function(parent, data){
    var d = instance.web.Model('advanced.search')
    .call('check_duplication', [data]).done(function (name) {
        // do stuff
        return name
    });
    var newData = d;
    this._super.apply(this, newData);
    // super is called before my request is done so the new data are not sent to super.
    }
});

所以我只想在请求完成时调用super。如果我将这个缓存在一个变量中,例如var self = this,那么如果我调用self__super ...它就不起作用,在//中执行完成回调的部分内容。我收到一个错误,告诉我self._super ...不是一个功能,它的行为就像父母不要等我。

这就是为什么我试图使用resolve来绕过这个问题。

2 个答案:

答案 0 :(得分:1)

当您执行ajax请求时,您根本不能调用.resolve。 ajax为您完成此操作 - 完成后,会调用resolve及其结果。

捕获结果,您只需在传递给donethen的回调函数中使用它:

var d = new instance.web.Model('advanced.search')
  .call('check_duplication', ['paul']);

d.done(function (name) {
    console.log(name); // here it is!
});

答案 1 :(得分:0)

根据完成回调的说法,看起来my_var是一个变量,所以将其作为变量传递而不是字符串文字

// kind of Ajax call in Odoo software
var d = new instance.web.Model('advanced.search')
    .call('check_duplication', ['paul']).done(function (name) {
    // expected name 'example', but got 'my_var' instead...
    return name
});

d.resolve(my_var);