正如标题中所提到的,当我将参数传递给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来绕过这个问题。
答案 0 :(得分:1)
当您执行ajax请求时,您根本不能调用.resolve
。 ajax为您完成此操作 - 完成后,会调用resolve
及其结果。
要捕获结果,您只需在传递给done
或then
的回调函数中使用它:
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);