Problem beim Value übernehmen
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
anfrage
ansehen
antwort
beispiel
brauche
code
dank
element
funktion
helfen
http
post
problem
reihenfolge
tabelle
tip
url
versuchen
zeile
ziel
-
Hallo Leute
ich bin derzeit dabei eine Hausverwaltung zu schreiben und möchte mit Hilfe von AJAX etwas mehr Komfort schaffen.... Bisher hat alles einwandfrei geklappt, nur jetzt hab ich gleich 3 Probleme
damit ihr euch das ganze erstmal überhaupt ansehen könnt, was passieren soll, geht ihr auf:
http://technofan.lima-city.de/index.php
Username: admintest
Passwort: test
Objektnummer: 1
wenn Ihr euch da einloggt und dann auf Dokumente hinzufügen geht, könnt ihr da bei Objektnummer eine 1 eintragen und die selectfelder "Ordner" und "Eigentümer" werden entsprechend ergänzt... die Ergänzungen erreiche ich durch AJAX ... Eine PHP Datei liest die Einträge aus der Datenbank.
wenn ihr jetzt in die 2. Zeile klickt, wird die Objektnummer übernommen, aber die Beiden felder werden in der 2. Zeile nicht ergänzt... die Problemdatei ist nun diese:
http://technofan.lima-city.de/ajax/add_documents.js
den anderen Quellcode könnt ihr euch ja so ansehen...
Dann hab ich noch ein Problem mit dem Tabindex, der wird auch nicht richtig generiert.
Ich grübel schon ne halbe Ewigkeit darüber nach aber komme nicht so recht auf die Lösung, währe nett, wenn mir da jemand helfen könnte.
Wenn ihr mir was erklären wollt, macht das bitte sehr ausführlich, ich bin gerade erst dabei JS zu lernen.
Gruß
technofan
Beitrag zuletzt geändert: 20.5.2010 18:55:46 von technofan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe trotz langem Suchen keinen konkreten Grund finden können, sondern nur viele kleine Baustellen, die wahrscheinlich zu deinem Problem führen, abgesehen davon, dass es ewig gedauert hat durch deinen code durchzusteigen.
Grundsätzlich solltest du mal gucken, was dein script alles abarbeitet, mit Firebug hab ich mit drei Klicks 11 Anfragen an den Server ausgelöst, von denen 3 auch noch abgebrochen wurden!
Das Script ist außerdem extrem Fehlerträchtig! Außerdem solltest du wiederkehrende Dinge in Funktionen auslagern, ich gehe mal davon aus, dass du vorher noch nie Programmiert hast, zumindest nicht in großem Umfang, oder gar Proffesionell, sonst sähe dein Code sauberer aus!
Ein Beispiel, der deinen Code gleich mehr aufräumen würde, eine Zentrale Ajax-Klasse! Hier mal extra für dich, ich hab sie letztens schonmal gepostet:
Aufrufen kannst du das ganze dann so, du definierst eine Variable, welche den request beinhalten soll:/* * Ajax, ganz easy und schöner codeaufbau, trotzdem umfangreich */ ajax = (function(){ var ajaxFactories = function(){ return [ function(){return new XMLHttpRequest();}, function(){return new ActiveXObject("Msxml2.XMLHTTP");}, function(){return new ActiveXObject("Msxml3.XMLHTTP");}, function(){return new ActiveXObject("Microsoft.XMLHTTP");} ]; }, ajax = function(p){ p = p || {}; this.url = p.url || window.location; this.method = p.method || 'GET'; this.callback = p.callback || function(){}; this.data = p.data; var xmlhttp = false, factories = ajaxFactories(), i=0, l=factories.length; for(;i<l;i++){ try{ xmlhttp = factories[i](); }catch(e){ continue; } break; } this.xmlhttp = xmlhttp; }; ajax.prototype = { send: function(p){ if(p) for(var i in p) if(p.hasOwnProperty(i)) this[i]=p[i]; var post = this.method.toUpperCase() != 'GET' ? this.data : false, req = this.xmlhttp, callback = this.callback; if(!post) this.url += '?'+this.data; req.open(this.method,this.url,true); req.setRequestHeader('User-Agent','XMLHTTP/1.0'); if(post) req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); req.onreadystatechange = function(){ if(req.readyState != 4)return; callback(req); }; if(req.readyState == 4)return; req.send(post); } } return ajax; })()
Danach kannst du so viele request mit an verschicken wie du willst, und auch noch die Parameter verändern, wie du willst:var request=new ajax({data:"foo=bar",url:"example.org/foobar.php"});
zudem eine Funktion, welche HTML-Element erstellt, das räumt deinen Code gleichmal extrem auf!request.send(); request.send({data:"xyz=abc"}); request.send({method:"GET"}); // statt dem Standard POST var alertRueckgabe = function(req){alert(req.responseText)}; // eine Funktion, als Beispiel request.send({callback:alertRueckgabe}); // die Funktion ausführen, wenn der request abgeschlossen ist
so kannst du dann ein neues Element so hinzufügen (styles hab ich bewusst weggelassen):function create(n, a, c){// name, attributes als Object, childs if(n.nodeName) n = n.cloneNode(true); else n = document.createElement(n); var i,j,l; if(a) for(i in a){ n[i] = a[i]; } if(c && (l=c.length)) for(i=0;i<l;i++) n.appendChild(c[i]); return n; }
ist doch ansehnlicher!var div1 = create('div'); var div2 = create(div1, { className:'foo', id:'bar', onclick:function(){alert('blubb')} }); var div3 = create('div', null, [ div1, create('p'), div2 ])
so nun aber zu deinem Problem, es ist schlicht so, dass deine ajax-anfragen teilweise mit Forbidden 403 beantwortet werden, außerdem Frage ich mich, warum du es dir so umständlich machst, und nicht einfach die select-boxen mit cloneNode kopierst, wenn sie eh das selbe enthalten sollen. Außerdem, das Problem welches du eingangs beschreibst, tritt bei mir auch schon auf, wenn ich in die 1. Zeile "1" eintippe.
Meine Diagnose:
1. Bitte räume deinen Code ein wenig auf, ich habe dir 2 Beispiele dazu gegeben;
2. Sieh mal nach was der Server da sendet, denn er soll ja eine gute antwort senden, statt "Abort" oder 403;
3. Überlege dir einmal, wie du zum Ziel gelangen willst, ich hatte bereits geschrieben, dass eine Ajax-Anfrage dumm ist, wenn man mit einfacheren Methoden zum selben Ziel gelangt;
4. Versuche einmal dein HTML eigenes HTML von oben nach unten zu lesen und du wirst feststellen, das die Reihenfolge nicht wirklich logisch ist, ich hab dir zusätzlich mal die Seite in lynx geöffnet und die screenshots hochgeladen:
http://nemoinho.kilu.de/skynet-in-lynx/technofan1.png
http://nemoinho.kilu.de/skynet-in-lynx/technofan2.png
http://nemoinho.kilu.de/skynet-in-lynx/technofan3.png
HTML besteht nicht aus Tabellen zum Designen und Divs für Hoverelementen, sondern aus vielen Speziellen Elementen mit deren Bedeutung und CSS zum designen, Tabellen sind nur für Tabelarische Daten, wie halt Fussballtabellen, oder Grammatiktabellen gedacht und sobald interaktiver Inhalt dazu kommt sind sie denkbar schlecht geeignet, da dann eine Steuerung mit der Maus immer schwerer wird.
Ich hoffe sehr, dass meine Ausführungen dir helfen konnten und würde dir auch gerne Weiterhelfen, aber es bringt nichts, den letzten Stein so gerade wie möglich zu mauern, wenn das Gebäude darunter schief steht.
Beitrag zuletzt geändert: 21.5.2010 9:36:17 von nemoinho -
Also erstmal danke für deine Antwort und die vielen Tipps... aber...
ich habe vor ca. 4 Tagen erst angefangen JS mal zu lernen... ich kenne so gut wie keine Möglichkeiten in JS und dementsprechend keine Befehle, dann ist es klar, dass der Code unsauber aussieht.
Ajax brauche ich, weil JS alleine keine Datenbankverbindung aufbauen kann, dazu brauche ich PHP... also auch AJAX, weil ein reload beim Arbeiten hinderlich währe...
die Felder muss ich einzeln erzeugen, weil jede Objektnummer andere Attribute hat, deswegen kann ich nicht einfach kopieren. Die objnr kann sich jeder Zeit ändern.
die Reihenfolge des HTML finde ich eigentlich schon sehr logisch, sonst würde die HP auch nicht logisch aussehen... das das ganze mit Tabellen gemacht wurde hat seine Gründe, ich arbeite sonst mit divs und Tabellen nur zur Auflistung.
Außerdem wird bei der webapp so ziemlich alles generiert, da ist nichts, aber auch gar nichts statisch.
Nun denn ich werde mal versuchen mit meinen mikrigen Kenntnissen (keine) deine Tipps umzusetzen.
Und danke nochmal
Gruß
technofan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage