我无法在代码执行期间增加 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() 事件处理程序中。
关于Javascript 对象计数器没有按预期递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35636833/