Rambomaster
Mitglied
Hallo Zusammen
Ich bin momentan gerade dran mir eine eigene Ajax-Klasse zu basteln. Wie in vielen Fällen funktioniert nicht immer alles genau so wie ich es gerne hätte, deshalb frage ich hier im Forum einfach mal nach ob jemand eine andere oder bessere Idee hat um mein Problem zu lösen
Mein Problem:
Ich möchte gerne von meiner handleResponse Funktion aus auf die Variablen und Funktionen der Klasse zugreifen. Mit this funktionierts ja schon mal nicht, da man ja innerhalb der handleResponse Funktion sozusagen im XmlHttpRequest Objekt ist. Leider ist es auch nicht möglich Parameter an die Callback Funktion zu übergeben.
Gibt es da eine andere oder bessere Möglichkeit um das Problem zu lösen?
@edit: Ich hab nach langer Suche im Internet endlich eine Lösung gefunden. Ich habe den Code unten mal aktualisiert.
Hier mal mein bisheriger Code:
Nun kommt aber schon mein nächstes Problem
Und zwar will ich, dass man ein Timeout angeben kann, damit der Request einfach nach einer gewissen Zeit abgebrochen wird.
Wie könnte man das lösen?
Ich habs schon mit einem setTimeout versucht, aber das führte wieder an Probleme, da ich wieder keine Funktion der Klasse aufrufen kann.
Ich bin momentan gerade dran mir eine eigene Ajax-Klasse zu basteln. Wie in vielen Fällen funktioniert nicht immer alles genau so wie ich es gerne hätte, deshalb frage ich hier im Forum einfach mal nach ob jemand eine andere oder bessere Idee hat um mein Problem zu lösen
Mein Problem:
Ich möchte gerne von meiner handleResponse Funktion aus auf die Variablen und Funktionen der Klasse zugreifen. Mit this funktionierts ja schon mal nicht, da man ja innerhalb der handleResponse Funktion sozusagen im XmlHttpRequest Objekt ist. Leider ist es auch nicht möglich Parameter an die Callback Funktion zu übergeben.
Gibt es da eine andere oder bessere Möglichkeit um das Problem zu lösen?
@edit: Ich hab nach langer Suche im Internet endlich eine Lösung gefunden. Ich habe den Code unten mal aktualisiert.
Hier mal mein bisheriger Code:
PHP:
function AjaxRequest() {
var self = this;
var xmlHttpRequest = null;
var timeout = null;
/**
* Sendet einen Ajax Request.
*
* @param method GET/POST
* @param url An diese URL wird der Request gesendet
* @param params Diese Parameter werden mit dem Request mitgesendet
* @param async true/false
* @param timeout in ms
* @param type Rückgabeformat: html, text, xml, json
* @param callback Callback-Funktion
*/
this.sendRequest = function(method, url, params, async, timeout, type, callback) {
this.timeout = timeout;
if(this.openXMLHttpRequest()) {
if(method == "GET") {
this.xmlHttpRequest.open(method, url + "?" + params, async);
this.xmlHttpRequest.send(null);
return true;
} else if(method == "POST") {
this.xmlHttpRequest.open(method, url, async);
this.xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
this.xmlHttpRequest.send(params);
return true;
} else {
alert("Unknown method!");
return false;
}
}
return false;
}
this.openXMLHttpRequest = function() {
if(this.xmlHttpRequest) {
if(this.xmlHttpRequest.readyState != 0 && this.xmlHttpRequest.readyState != 4) {
return false;
}
this.xmlHttpRequest.abort();
}
try {
// Mozilla, Opera und Safari
this.xmlHttpRequest = new XMLHttpRequest();
} catch(e) {
// Internet Explorer
try {
this.xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
this.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
this.xmlHttpRequest.onreadystatechange = this.handleResponse;
return true;
}
this.handleResponse = function() {
if(this.readyState == 1) {
if(self.timeout != null) {
}
}
if(this.readyState == 4) {
if(this.status != 200) {
// Es ist ein Fehler aufgetreten
alert("Error: " + this.status + " - " + this.statusText);
} else {
// Alles OK
document.getElementById('debug').innerHTML = this.getResponseHeader("Content-Type") + ": " + this.responseText;
}
}
}
}
Nun kommt aber schon mein nächstes Problem
Und zwar will ich, dass man ein Timeout angeben kann, damit der Request einfach nach einer gewissen Zeit abgebrochen wird.
Wie könnte man das lösen?
Ich habs schon mit einem setTimeout versucht, aber das führte wieder an Probleme, da ich wieder keine Funktion der Klasse aufrufen kann.
Zuletzt bearbeitet: