Ajax Method Chaining
Reinhard
- javascript
Hallo zusammen,
ich probiere immer mal wieder was neues mit JavaScript aus; gestern wollte ich folgendes hinkriegen:
Ich habe eine Funktion, in der ich mit Ajax eine Datei einlesen und das Resultat anschließend zurückgeben möchte, um es dann – ganz im jQuery-Style – weiterverarbeiten zu können. So ungefähr:
var ajax = function(url, settings) {
var async = (typeof settings.async === 'undefined') ? true : settings.async;
var xhr = new XMLHttpRequest();
xhr.overrideMimeType('text/plain; charset=UTF-8');
xhr.onreadystatechange = function() {
if (xhr.readyState !== 4)
return;
if (xhr.status === 200)
settings.success.call(xhr, xhr);
else
settings.error.call(xhr, xhr);
};
xhr.open('GET', url + '?nocache=' + new Date().getTime(), async);
xhr.send(null);
};
function ersteZeile(url) {
ajax(url, {
success: function(xhr) {
// yay, alles okay
// return xhr.responseText.split('\n')[0];
},
error: function(xhr) {
// ups, fehler
// return '';
}
});
}
var z = ersteZeile('meineTextdatei.txt').substr(0, 5);
Natürlich geht das ja nicht so einfach. Man müsste den Ajax-Request synchron erledigen; also so:
function ersteZeile(url) {
var zeile;
ajax(url, {
async: false,
success: function(xhr) {
// yay, alles okay
zeile = xhr.responseText.split('\n')[0];
},
error: function(xhr) {
// ups, fehler
zeile = '';
}
});
return zeile;
}
So, und an dieser Stelle möchte ich mal die Experten fragen: Gibt es da eine andere, bessere™ Möglichkeit? Synchrones Ajax ist ja nicht so der Hit, wie ich gehört habe. Ich habe mal in Richtung »Promise« geschaut, aber soweit ich das nach ein paar mal durchlesen beurteilen kann ginge das Chaining damit auch nicht.
Reinhard
Tach!
So, und an dieser Stelle möchte ich mal die Experten fragen: Gibt es da eine andere, bessere™ Möglichkeit? Synchrones Ajax ist ja nicht so der Hit, wie ich gehört habe. Ich habe mal in Richtung »Promise« geschaut, aber soweit ich das nach ein paar mal durchlesen beurteilen kann ginge das Chaining damit auch nicht.
Richtig, asynchrones Chaining geht nach meinem Dafürhalten überhaupt nicht. Asynchrones Arbeiten und damit auch Promises verlangen eine Funktion übergeben zu bekommen, die man nachher aufrufen kann. Chaining ist aber eine Direkt-Nacheinander-Ausführung. Man kann aber die Promises selbst chainen. Suchen nach "promise chaining" findet einige Vorgehensweisen.
dedlfix.
@@Reinhard
Synchrones Ajax ist ja nicht so der Hit
Auf der Hitliste der Oxymora könnte synchrones asynchrones JS & XML schon weit oben stehen.
LLAP 🖖
Tach!
Synchrones Ajax ist ja nicht so der Hit
Auf der Hitliste der Oxymora könnte synchrones asynchrones JS & XML schon weit oben stehen.
Das verbieten unsere allgemeinen AGB-Bedingungen.
Abgesehen davon ist das nicht wirklich witzig. Die Verwendung vom XHR geht nun mal synchron und asynchron. Warum sich da der Erfinder der Abkürzung AJAX dabei nur auf die asynchrone Arbeitsweise und nur XML beschränkt hat, liegt zwar nahe, trotzdem hat sich der Begriff für die ganze Bandbreite des Einsatzes von XHR durchgesetzt. Dagegen anzukämpfen bringt so viel, wie bei Sturm in die entgegengesetzte Richtung zu blasen, um ihn eindämmen zu wollen. Man kann seine Kraft auch für wichtige Schauplätze verwenden. Nimm das Wort Ajax als das Wort an, wie es heute Verwendung findet und lass in der Schublade der Historie verschwinden, dass das mal eine Abkürzung war.
dedlfix.
@@dedlfix
Nimm das Wort Ajax als das Wort an, wie es heute Verwendung findet
Du meinst so wie nicht-reguläre reguläre Ausdrücke? ;-)
LLAP 🖖
Hallo,
Du meinst so wie nicht-reguläre reguläre Ausdrücke? ;-)
Frage: Was sind guläre Ausdrücke?
Antwort: Die sind irre!
Gruß
Kalk