2016-07-30 11 views
0

Ich habe einen Code wie unten gezeigt.Wie verwende ich eine globale Variable mit jquery?

var globalVar = '' 
$.get("some.php", function(data, status) 
{ 
    alert(data) 
    globalVar = data 
}); 
alert(globalVar) 

Während die erste Warnung den Wert der Daten anzeigt, ist dies bei der zweiten Warnung nicht der Fall. Es scheint so, als ob globalVar innerhalb der get's Funktion nicht richtig zugewiesen wurde. Was wäre der richtige Weg, um hier eine globale Variable zu verwenden?

+9

Das hat mehr mit asynchronen Aspekte von „Ajax“ zu tun, anstatt den Geltungsbereich von Variablen. Es ist sehr wahrscheinlich, dass die zweite Warnung aufgerufen wird, bevor der Abruf abgeschlossen ist. – Devon

+0

Ja, du hast Recht :). – pythonic

Antwort

3

Was ist passiert wahrscheinlich, dass Ihre get() Funktion nicht beendet, bevor die letzte alert() ist gerufen werden. Um sicherzustellen, dass diese in der richtigen Reihenfolge auftreten, können Sie die letzte in einen Rückruf versetzen, sobald die Datei empfangen wird.

So versuchen, diese stattdessen:

var globalVar = '' 
$.get("some.php", function(data, status) 
{ 
    alert(data) 
    globalVar = data 
}).done(function() { 
    alert(globalVar) 
}); 
2

können Sie versuchen, diese

var globalVar = false; 

jQuery.ajax({ 
    type: "GET", 
    url: 'some.php', 
    success: function (data) { 
    globalVar = true; 
    }, 
    async: false // <- this turns it into synchronous 
});​ 

alert(globalVar); 

ich den besseren Weg, in diesem Fall aktualisieren

var globalVar = false; 

function getData(callback) { 
    $.ajax({ 
     url: 'jsOnChange.php', 
     type: 'GET', 
     success: callback 
    }) 
} 
getData(function(response) { 
    globalVar = true; 
    console.log(globalVar); 
}); 
+0

Synchrone AJAX-Anforderungen sind die schlechtesten Vorschläge. – Xufox

+0

Wenn Sie eine bessere Idee haben, lassen Sie es mich wissen und erfahren Sie es. xD Nach meiner Abstimmung meine Antwort xD Danke –

+1

Siehe das doppelte Ziel oben. – Xufox