2017-06-15 6 views
0

Ich habe die folgende Funktion. Wenn ich versuche, die Variable zu protokollieren, gibt es mich undefiniert. Ich denke, es liegt an der Ladezeit des AJAX-GET-Anrufs, aber ich weiß nicht, wie ich es beheben soll.Javascript undefinierte Variable wegen AJAX GET Anfrage

EDIT: Ja, alle Werte sind korrekt. Die Datei console.log protokolliert den korrekten Wert, sodass alles in der Funktion funktioniert. Es ist nur die Rückkehr, die nicht funktioniert.

Irgendwelche Ideen?

function loadOnderhoud() { 
    var username = window.sessionStorage.getItem("huidigeGebruiker"); 
    var url = "restservices/gebruiker?Q1=" + username; 
     $.ajax({ 
      url : url, 
      method : "GET", 
      beforeSend : function(xhr) { 
       var token = window.sessionStorage.getItem("sessionToken"); 
       xhr.setRequestHeader('Authorization', 'Bearer ' + token); 
      }, 
      success : function(data) { 
       var onderhoud; 

       $(data).each(function (index) { 
        if (this.geslacht == "m"){ 
         onderhoud = (66 + (13.7 * this.gewicht) + (5 * (this.lengte*100)) - (6.8 * this.leeftijd)) * this.activiteit; 
        } 
        else if (this.geslacht == "v"){ 
         onderhoud = (655 + (9.6 * this.gewicht) + (1.8 * (this.lengte*100)) - (4.7 * this.leeftijd)) * this.activiteit; 
        } 
        }); 
       console.log(onderhoud); 
       return onderhoud; 
      }, 
     }); 
} 


function loadAdviezen(){ 
    var onderhoud = loadOnderhoud(); 
} 
+0

Erfolg führt nur abgeschlossen. – SabirAmeen

+1

Sind Sie sicher, dass Ihre Antwort die richtigen Werte zurückgibt? –

+0

Wahrscheinlich passt 'this.geslacht' weder zu' m' noch zu 'v' ... – Fr0zenFyr

Antwort

1

Ausgabe wird im Zusammenhang von Erfolgsfunktion von Ajax zurückzukehren,

Richtiger Weg von den Anruf Geben Sie Back-Funktion tut: einmal die Ajax-Request

function loadOnderhoud(getData) { 
    var username = window.sessionStorage.getItem("huidigeGebruiker"); 
    var url = "restservices/gebruiker?Q1=" + username; 
     $.ajax({ 
      url : url, 
      method : "GET", 
      beforeSend : function(xhr) { 
       var token = window.sessionStorage.getItem("sessionToken"); 
       xhr.setRequestHeader('Authorization', 'Bearer ' + token); 
      }, 
      success : function(data) { 
       var onderhoud; 

       $(data).each(function (index) { 
        if (this.geslacht == "m"){ 
         onderhoud = (66 + (13.7 * this.gewicht) + (5 * (this.lengte*100)) - (6.8 * this.leeftijd)) * this.activiteit; 
        } 
        else if (this.geslacht == "v"){ 
         onderhoud = (655 + (9.6 * this.gewicht) + (1.8 * (this.lengte*100)) - (4.7 * this.leeftijd)) * this.activiteit; 
        } 
        }); 
       console.log(onderhoud); 
       getData(onderhoud); 
      }, 
     }); 
} 

function getData(data) 
{ 
    var onderhoud = data; 
} 
loadOnderhoud(getData); 
+0

Das async false funktioniert nicht, ich werde Ihren zweiten Vorschlag versuchen. –

+0

@Liam, ja ich habe deinen Punkt Antwort wurde versehentlich gebucht Ich habe die zweite Möglichkeit auch hinzugefügt, mein Fehler :) –

+1

OK, ich entferne es. –