2016-02-25 76 views
8

我在执行代码时无法获得errorCount属性。我遇到的问题发生在$.ajax请求内,更具体地说是addError()方法。JavaScript对象计数器不按预期递增

如果我使用下面的代码来检查errorCount的当前计数,它总是会返回0即使我手动创建了一个错误发生。但是在我调用addError()之后,在ajax方法的内部,然后检查errorCount的值,它显示了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"); 
      } 
     }); 
    } 
} 
+1

这是因为调用是异步的,它显示为0的错误返回1 –

回答

3

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

enter image description here

+1

这确实起作用了。谢谢! – Yamaha32088