2017-06-15 1 views
0

J'ai la fonction suivante. Quand j'essaye d'enregistrer le varible, cela me donne un indéfini. Je pense que c'est à cause du temps de chargement de l'appel AJAX GET, mais je ne sais pas comment le réparer.Javascript variable non définie à cause de la requête AJAX GET

EDIT: Oui, toutes les valeurs sont correctes. Le fichier console.log enregistre la valeur correcte, de sorte que tout fonctionne dans la fonction. C'est juste le retour qui ne fonctionne pas.

Des idées?

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

succès exécute une seule fois la demande ajax est terminé. – SabirAmeen

+1

Êtes-vous sûr que votre réponse renvoie les valeurs correctes? –

+0

Probablement 'this.geslacht' ne correspond pas non plus' m' ou 'v' ... – Fr0zenFyr

Répondre

1

problème est lié à revenir de la fonction de réussite ajax,

Une bonne façon de faire est Fournir la fonction de rappel:

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

L'async false ne fonctionne pas, je vais essayer votre deuxième suggestion. –

+0

@Liam, oui j'ai eu votre réponse de point a été posté par erreur j'ajoutais la deuxième manière aussi, mon erreur :) –

+1

OKay je le supprime. –