2016-02-25 12 views
8

Mam problemy z uzyskaniem właściwości errorCount podczas wykonywania kodu. Problem, który mam, występuje wewnątrz żądania $.ajax, a dokładniej w metodzie addError().Licznik obiektów JavaScript nie zwiększa się zgodnie z oczekiwaniami

Jeśli użyję poniższego kodu poniżej, aby sprawdzić bieżącą liczbę errorCount, zawsze zwraca ona 0, mimo że ręcznie utworzyłem błąd. Ale wewnątrz metody ajax po wywołaniu addError(), a następnie sprawdzić wartość errorCount pokazuje 1 jak powinien. Co zrobiłem źle?

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

Oto kod obiektu:

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

To dlatego, że wywołanie jest asynchroniczna, to pokazuje 0, zanim zwróci błąd 1. –

Odpowiedz

3

Problem polega robisz asynchroniczny (Ajax) połączenia. Po wywołaniu funkcji queueCalls wykonuje wywołanie AJAX, a następnie uruchamia instrukcje console.log. Nie czeka, aż połączenie AJAX zostanie wykonane, a otrzymałeś błędy, aby uruchomić instrukcje konsoli. Jeśli chcesz to zrobić, spójrz na numer jQuery documentation for .ajax() i albo spraw, aby twoje wywołanie AJAX nie było asynchroniczne, albo umieść instrukcje konsoli w procedurze obsługi zdarzeń Done(), która uruchomi się po zakończeniu wywołania AJAX.

enter image description here

+1

To załatwiło sprawę. Dziękuję Ci! – Yamaha32088

Powiązane problemy