2016-02-25 16 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

これは、コールが非同期であるため、エラーがトリックをした1 –

答えて

3

問題は、あなたが非同期(AJAX)の呼び出しを行っているです。 queueCalls関数を呼び出すと、AJAX呼び出しが行われ、次にconsole.logステートメントが実行されます。 AJAX呼び出しが完了するまで待機せず、コンソールステートメントを実行するためにエラーを受け取っています。その場合は、jQuery documentation for .ajax()を見て、AJAX呼び出しを非同期にするか、AJAX呼び出しが完了した後に起動する.done()イベントハンドラにコンソール文を入れます。

enter image description here

+1

を返す前に、それが0を示しています。ありがとうございました! – Yamaha32088

関連する問題