Sponsored Links |
|
||||
ja klar, das ist einfach die nachfolgende funktion, die mir die tipparbeit etwas abnimmt:
Code:
function $(id) { //alert(id); if(browsertyp.NS6) { return document.getElementById(id); } else { if(browsertyp.IE) { return document.all(id); } } } |
|
||||
Die ist auch schon zweifelhaft. Warum nicht so:
Code:
function $(id) { if(document.getElementById) { return document.getElementById(id); } else if(document.all) { return document.all(id); } } Naja, deine AJAX Funktion kodiert die Parameter falsch, lass dir doch mal irgendwie ausgeben, was bei deinem Serverskript an Parameter ankommt. Allerdings wirst du mit so einer Funktion früher oder später noch mehr Probleme bekommen, da du nicht kontrollierst ob der Request abgearbeitet wurde und bei jedem Request ein neues Objekt erzeugst, was unnötig Resourcenverschwendet ist. |
|
||||
Naja, so kann man es auch machen, aber ob ich nun die variabel browsertyp abfrage oder direkt abfrage ob der browser getElementByID kennt is ja eigentlich egal, denke ich.
Mittlerweile bin ich einen Schritt weiter, und bekomme nun die benötigten Daten per httpRequest zurück, indem ich eine requestdatei aufrufe die mir nur die daten als echo an die funktion zurückgibt und ich diese dann nicht ausgebe sondern an eine andere funktion weiter gebe. aber es gibt immer was was wieder nicht geht, sicherlich auch weil ich eben nicht so der profi bin und mir eben nicht immer die optimalen lösungen einfallen. hier mal der code für die Verarbeitung der requestdaten, so wie ich es jetzt habe: Code:
function httpR(obj,action) { var xmlhttp = null; // Mozilla if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } // PHP-Datei aufrufen xmlhttp.open("GET", encodeURI(action), true); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState != 4) { $(obj).innerHTML = 'wird geladen ...'; } if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { if(obj == 'map') { showMap(obj,xmlhttp.responseText); } else { $(obj).innerHTML = xmlhttp.responseText; } } } xmlhttp.send(null); } |
|
||||
Zitat:
Und deine Funktion dürfte immer noch Probleme haben. Was passiert, wenn du mehrmals schnell hintereinander die Funktion aufrufst? |
|
||||
ja ok, das ist natürlich wohl die bessere Lösung in diesem Fall.
Wenn ich eine Funktion mehrmals schnell hintereinander aufrufen will, dann geht dies nicht, aber momentan habe ich kein anderes Konzept wie ich an die Sache rangehen soll. Wie würdest Du denn so etwas lösen, wenn überhaupt? Ziel soll es sein, daß die Webseite nur beim ersten Aufruf komplett geladen wird, und dann nur noch die einzelnen Div-Container je nach Aktion auf der Seite ausgetauscht werden. Dies hat u.a. den Grund, da ein Flash-Video im oberen Teil sonst ständig neu geladen würde und auch somit immer wieder von vorne beginnt. Dies ist für die Seite bzw. das Konzept so nicht optimal. Daher schreibe ich eben die Div-Inhalte mit innerHTML bzw. wenn ich eine Datenbankabfrage brauche mit dem httpRequest jeweils neu. Das dies sicherlich nicht opimal ist, und mit Fehlern behaftet ist weiss ich selbst, aber wie gesagt, ich weiss keine anderen Ansatz für dieses Projekt. Meine Funktionen sind sicherlich nicht gerade sehr gut und sicherlich auch Fehlerhaft, da es ja auch öfter vorkomt, das |
Sponsored Links |
|
||||
Naja, ich würde einen Objektorientierten Ansatz wählen und im HTTP oder AJAX Objekt einen Flag setzen, der anzeigt, ob ein Request gerade bearbeitet wird oder nicht und nur einen neuen Request zulassen, wenn der alte Request fertig ist.
Momentan sieht das bei mir so aus: Code:
/* */ var Ajax = new function() { var charset = {}; // Das xml_http Objekt function XMLHttp() { // readyState Callback Funktionen // http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#xmlhttprequest this.onbefore = // 0: The initial value. this.onopen = // 1: he open() method has been successfully called this.onrequest = // 2: The UA successfully completed the request, // but no data has yet been received. this.onheader = // 3: Immediately before receiving the message body (if any). // All HTTP headers have been received. this.oncomplete = // 4: The data transfer has been completed. this.onerror = this.onchange = function() {return false;}; // Dummyfunktion var obj = function() { // Das XMLHttp Objekt erzeugen if (window.XMLHttpRequest) return new XMLHttpRequest(); else if (window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { alert(e); } } } }(); // Aufruf function encodeParameter() { var tmp = []; for(var p in param) tmp.push(encodeURIComponent(p) + '=' + encodeURIComponent(param[p])) return tmp.join('&'); } if(!obj) throw('Fehler! Kann HTTPRequest Objekt nicht erzeugen'); // Objekt ok. var self = this; var url; var idle = false; var status = ''; var time; var type; var param = {}; function ready() { var s = obj.readyState; self.onchange(s); if(s == 0) self.onbefore(); else if(s == 1) self.onopen(); else if(s == 2) self.onrequest(); else if(s == 3) self.onheader(); else if(s == 4) { idle = false; time = (new Date()) - time; var msg = ''; switch(obj.status) { case 200 || 304: self.length = self.header('Content-Length'); self.lastModified = new Date( self.header('Last-Modified') ); self.contentType = self.header('Content-Type'); self.oncomplete(); break; case 403: msg = 'Zufriff auf die Datei "' + url +'" verweigert. (Error 403)'; break; case 404 : msg = 'Datei "'+ url + '" nicht gefunden. (Error 404)'; break; case 408 : msg = 'Timeout beim aufruf der Datei "' + url + '" (Error 408)'; break; case 500: msg = 'Server Fehler beim Aufruf von "' + url + '" (Error 500).'; break; default: msg = 'Bei der Übertragung trat ein Fehler auf (Error ' + obj.status+')'; } if(msg) { return self.onerror(msg); } return true; } } // open(url) this.open = function(u, method, t, charset) { if(this.isIdle()) return this.onerror('Request ist in Bearbeitung'); if(!method) method = 'GET'; type = ( 'text/' + (t ? t : 'xml') ); charset = (charset ? charset : 'utf-8'); url = u; obj.open(method, url + '?' + encodeParameter(), true); if (obj.overrideMimeType) { this.mimeType = 'text/' + type + '; charset=' + charset; obj.overrideMimeType(this.mimeType); } else if(typeof obj.setRequestHeader != 'undefined'){ obj.setRequestHeader('Charset', charset); obj.setRequestHeader('Content-Type', type); } obj.onreadystatechange = ready; idle = true; time = new Date(); obj.send(null); return true; }; this.header = function(name) { if(!name) return obj.getAllResponseHeaders(); return obj.getResponseHeader(name); }; this.response = function() { if(this.type() == 'text/xml') return obj.responseXML; return obj.responseText; }; this.status = function() { return status; }; this.isIdle = function() { return idle; }; this.time = function() { return time;}; this.type = function() { return type; }; this.setParam = function() { if(!arguments.length){ return param; } else if(arguments.length == 1){ if(typeof arguments[0] == 'object'){ for(var p in arguments[0]) param[p] = arguments[0][p]; } else (typeof arguments[0] == 'string') return param[arguments[0]]; } else if(arguments.length == 2){ param[arguments[0]] = arguments[1]; } else { param = {}; } }; } // XMLHttp-Objekt this.request = function() { return new XMLHttp(); } }; Beispiel: Code:
var myAjax = Ajax.request(); myAjax.oncomplete = function(res) { show('Header:\n' + x.header()); show('<hr>' + this.type() + '<hr>'); this.type() == 'xml' ? set(res.response('xml') ) : set(res.response()); }; myAjax.setParam({ 'test': 'testöäüß&;', test2: 'öäü'}); myAjax.open('test.php', 'GET'); |
Sponsored Links |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Problem beim ein/ausblenden von Spalten in Tabellen via CSS und JavaScript | chrisol_76 | CSS | 2 | 21.07.2008 18:37 |
Problem: IE versteckt Text & Feedback | Herbi | CSS | 2 | 11.08.2006 15:39 |
Javascript Problem - onclick return | Spyker | Javascript & Ajax | 4 | 11.07.2006 12:54 |
Problem mit background-image / javascript im IE | danliker | CSS | 3 | 17.05.2005 22:50 |
Problem mit Background-Color im FireFox | to.ni | CSS | 2 | 31.08.2004 12:13 |