javascript - 在我的代码中哪里引入延迟函数

标签 javascript jquery

我有具有验证属性的对象,并且该属性函数将请求发送到服务器进行测试。

    //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();

您将得到以下输出:

image description

它与您的功能相同:

clsAjax.request('duplicate', function(){...});

有两种解决方法:

  1. 在创建回调之前创建对 this 的引用:

    var _this = this;
    clsAjax.request('duplicate', function(){_this.valid = true;});
    
  2. 使用 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/

相关文章:

javascript - 物化日期选择器不工作

javascript - JavaScript 上日期对象的问题

javascript - 如何让鼠标悬停事件在 p 和父 div 上都起作用

jquery - Bootstrap 下拉菜单与 Rails 4 间歇性工作

javascript - Highcharts csv 数据加载

javascript - jQuery Mobile 选择单选按钮不起作用

javascript - 链接(所有 div 之上的 href)

javascript - http请求后调用

javascript - 附加 Jquery.min.js 时发生 Jquery 冲突

javascript - 阅读更多/更少,无需在 JavaScript 中剥离 Html 标签