我有具有验证属性的对象,并且该属性函数将请求发送到服务器进行测试。
//clsAjax.js file where i access request function
request: function(cmd, callback){
_sendReq(cmd, callback);
}
//Definition
obj = {
title : 'name',
validation : function(this){
this.valid = false;
clsAjax.request('duplicate', function(){
if(response == true){
this.valid = true;
console.log(this.valid);
}
});
}
}
//function call
form.validation(obj);
console.log(obj.valid); // It always have false value
验证函数接收 true,但在此之前它执行验证 false 行。
我希望它等到ajax完成执行。
如何做到这一点?
谢谢。
最佳答案
您的代码中有两个问题。
1。 this
通常指的是分配了函数的对象
所以如果你这样做:
var obj = {num: 1234, func: function() {console.log(this);}};
obj.func();
您将得到以下输出:
它与您的功能相同:
clsAjax.request('duplicate', function(){...});
有两种解决方法:
在创建回调之前创建对
this
的引用:var _this = this; clsAjax.request('duplicate', function(){_this.valid = true;});
使用 HTML5
Function.prototype.bind
- 更改函数中this
的含义:var callback = function(){this.valid = true;}.bind(this); clsAjax.request('duplicate', callback);
1。在回调返回之前查询值是没有意义的
form.validation(obj);
console.log(obj.valid); // It always have false value
当您执行 console.log(obj.valid)
时,您的回调尚未调用,因为它仍在与服务器通信。
关于javascript - 在我的代码中哪里引入延迟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669755/