Jquery $.post() variablenspeicher
Ich bin nicht Massiv Erfahrung mit JavaScript, und ich habe Probleme mit dem Geltungsbereich von Variablen und jquery. Ich habe die folgende Struktur:
function pass_variables()
{
username = "efcjoe"
response = post_variables(username)
alert(response)
}
function post_variables(username)
{
$.post(
'/path/to/url/',
{
'username': username,
},
function(data)
{
valid = (data != 0) ? true : false
//OPTION 1: If I put return here...
return valid; //... the alert box in pass_variables says "undefined"
},
"text"
);
//OPTION 2: If I put return here...
return valid; //... The alert box does not pop up, and Safari debug gives
// me the error: "Can't find variable: valid"
}
Übersehe ich da etwas? Ich denke valid
sollte eine Globale variable, und daher option 2 sollte gut funktionieren. Ich bin wirklich nicht sicher über option 1.
Kann jemand mir einen Rat geben auf der beste Weg, um dies zu bewerkstelligen?
Vielen Dank.
Eww, weniger Globale vars wie möglich. In Fällen wie diesem, dann machst du etwas falsch.
InformationsquelleAutor user116170 | 2009-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem option 1 sind Sie wieder, die von der callback-Funktion und Ihr Rückgabewert wird nicht verwendet, da diese Funktion nur aufgerufen, wenn der Ajax-request endet.
In der option 2, das Sie wieder aus Ihrer main-Funktion, aber diese Rückkehr geschieht, bevor die callback-Funktion zuweisen, die einen beliebigen Wert für Ihre
valid
variable.Ich würde umgestalten von code in dieser Art und Weise, ohne die Verwendung von globalen Variablen:
InformationsquelleAutor CMS
Ajax-Aufrufe sind asynchron, das bedeutet, dass Sie aufgerufen werden, aber warten, um für die Ausführung zu vervollständigen. Grundsätzlich werden Ihre Alarm wird ausgelöst, bevor der ajax-request abgeschlossen ist, und führen Sie die callback-Funktion so ändern Sie die variable.
Die beste Sache, die Sie tun können, ist tatsächlich an eine Funktion zu, die ausgeführt werden, wenn der ajax-request abgeschlossen ist. Auch dies negiert die Notwendigkeit für Globale Variablen, die verpönt sind, da andere plugins, Skript können Sie verändern Ihren Zustand und lassen Sie Ihr Skript öffnen, um Fehler, Mängel etc
E. g
InformationsquelleAutor redsquare
Yeah, dein problem ist, dass man nicht greifen einige der Reihenfolge der Operationen-Probleme hier. Die Funktion Sie passieren zu
$.post
ist ein Rückruf; er wird später deutlich nachpost_variables()
beendet.post_variables()
selbst nicht warten, bis die$.post
zu beenden, alsovalid
existiert nicht, wenn Sie versuchen, es zu benutzen.InformationsquelleAutor chaos
Denken Sie daran, dass AJAX asynchron ist. Die
return valid;
ausgeführt sofort nach der$.post()
eingerichtet ist, aber vor der post abgeschlossen hat (und Sie daher vor dervalid
definiert ist). Was Sie wahrscheinlich tun möchten, ist dieser:Und beachten Sie, dass diese nicht mehr benötigt Globale Variablen, aber function-scope Variablen, die deklariert sind mit
var
.InformationsquelleAutor Nate
Könnte man lösen das problem ganz einfach durch das zuweisen einer Funktion statt inline ein, und die Ereignis-Funktion übernimmt der Alarm:
InformationsquelleAutor Chris S