Javascript 对象计数器没有按预期递增

标签 javascript jquery

我无法在代码执行期间增加 errorCount 属性。我遇到的问题发生在 $.ajax 请求内部,更具体地说是 addError() 方法。

如果我使用下面的代码检查 errorCount 的当前计数,它总是返回 0,即使我手动创建了一个错误发生。但是在我调用 addError() 然后检查 errorCount 的值后,在 ajax 方法内部它显示了 1 。我做错了什么?

var boom = new test(settings, formData, search);
console.log(boom.errorCount);
boom.queueCalls(settings);
console.log(boom);
console.log(boom.errorCount);

目标代码如下:

function test(a, b, c) {
    this.settings = a;
    this.formData = b;
    this.search = c;
    this.errorCount = 0;
}

test.prototype = {
    constructor: test,
    queueEmails:function(settings, formData, search) {
        var url = '/example-url-endpoint';
        var data = {postData: settings + "&" + formData + "&" + search};
        this.sendRequest(url, data);
    },
    queueCalls:function(settings) {
        var url = '/example-url-endpoint2';
        this.sendRequest(url, settings);
    },
    addMessage:function(response) {
        flashMessage(response.Message, response.Result);
    },
    addError:function() {
        this.errorCount++;
    },
    sendRequest:function(url, data) {
        var blah = this;

        j$.ajax({
            type: "POST",
            url: url,
            data: data,
            dataType: 'json',
            success: function(data) {
                response = JSON.parse(data);
                if(response.Result != 'error') {
                    blah.addMessage(response);
                } else {
                    blah.addMessage(response);
                    blah.addError();
                    console.log(blah.errorCount);
                }
            },
            error: function(e, textStatus, errorThrown) {
                blah.addError();
                console.log(blah.errorCount);
                alert("There was an error creating the queue");
            }
        });
    }
}

最佳答案

问题是您正在进行异步 (AJAX) 调用。当您调用 queueCalls 函数时,它会进行 AJAX 调用,然后运行您的 console.log 语句。它不会等到 AJAX 调用完成,并且您已收到运行控制台语句的错误。如果您想这样做,请查看 jQuery documentation for .ajax() ,并使您的 AJAX 调用不是异步的,或者将您的控制台语句放入将在 AJAX 调用完成后触发的 .done() 事件处理程序中。

enter image description here

关于Javascript 对象计数器没有按预期递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35636833/

相关文章:

javascript - 每次运行代码时我的网站都会刷新

javascript - pickadate.js 根本不工作

javascript - TR 的 onblur 功能

javascript - 不需要参数的回调 - 为什么?

javascript - 使用 jQuery,如何获取元素的文本值?

javascript 使用 forEach 进行嵌套数组

javascript - JQuery 未从 PHP echo 运行

对象内项目的 jQuery 选择器

javascript - 将 javascript 函数 Hook 到每个回发

JavaScript 单击事件仅定位元素,而不是其父容器