kostenloser Webspace werbefrei: lima-city


Problem beim Value übernehmen

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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:
    /*
     * 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;
    })()
    Aufrufen kannst du das ganze dann so, du definierst eine Variable, welche den request beinhalten soll:
    var request=new ajax({data:"foo=bar",url:"example.org/foobar.php"});
    Danach kannst du so viele request mit an verschicken wie du willst, und auch noch die Parameter verändern, wie du willst:
    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
    zudem eine Funktion, welche HTML-Element erstellt, das räumt deinen Code gleichmal extrem auf!
    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;
    }
    so kannst du dann ein neues Element so hinzufügen (styles hab ich bewusst weggelassen):
    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
    ])
    ist doch ansehnlicher!
    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
  4. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!