Ich versuche, einen Wert von einem onreadystatechange AJAX-Aufruf zurückzugeben ... Ich habe diese Seite gefunden: stackoverflow link. Ich habe zwar funktioniert, habe aber festgestellt, dass es keinen Unterschied macht, die Fn-Funktion hinzuzufügen oder zu entfernen. Der folgende Code funktioniert:Rückgabewert von onreadystatechange mit Callback
username_is_available();
function username_is_available() {
var username = document.getElementById('username').value;
get_data('username', username, function(returned_value) {
if (returned_value == 'true') {
document.getElementById('username_err').innerHTML = 'Taken';
} else {
document.getElementById('username_err').innerHTML = 'Available';
};
});
}
function get_data(data_type, data, fn) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
fn(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "availability.php?" + data_type + "=" + data, true);
xmlhttp.send();
}
Es funktioniert alles gut, aber das ist nicht mein Ziel, würde ich eine Funktion username_is_available() wie die true zurückgibt, wenn der Benutzername in der Tat zur Verfügung steht. Stattdessen passiert hier eine Aktion (innerHTML wird geändert). Und wenn ich versuche, eine Rückgabe in der anonymen Funktion zu machen, bekomme ich das gleiche Ergebnis, als ob ich es direkt in der onreadystatechange zurückgegeben hätte: var unassigned
Für diejenigen, die gerade auf 'duplicate thread' klicken, ist dies nicht 't ein Duplikat. Ich habe mindestens fünf Stunden auf ihn gewesen
In Ihrem letzten Beispiel, denke ich, 'genommen' sollte' verfügbar' sein. –
Sie ordnen 'genommen' einen Wert zu und verwenden eine nicht deklarierte Variable 'verfügbar'. Der Variablenname 'genommen' sollte 'verfügbar' sein, weil er einen Boolean von einer Funktion mit dem Ausdruck 'is_available' empfängt. –
@PatrickRoberts Guter Fang, ich wurde in der ersten Antwort ertappt und schrieb hektisch Code in das Textfeld, anstatt einen richtigen Editor und Einfügen wie gewöhnlich. Vielen Dank! – Scott