zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Per Ajax ein JS Array aus Datenbank befüllen zur weiterverwendung per JS

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 21.11.2008, 23:17
Benutzerbild von stravid
Human Compiler
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 16.01.2008
Ort: Austria
Beiträge: 186
stravid befindet sich auf einem aufstrebenden Ast
Standard Per Ajax ein JS Array aus Datenbank befüllen zur weiterverwendung per JS

Wie ich mit Ajax eine PHP Methode aufrufe und den Inhalt dann ausgebe ist mir klar, nur in diesem Fall muss ich die Daten die ich von der Methode bekomme per JS weiterverarbeiten!

Problemstellung:

- Datenbank wo viele ID Paare für erlaubte Verbindungen zwischen zwei Orten gespeichert sind.
- Wenn der Mauszeiger über einen Link fährt wird per PHP und SQL nachgesehen welche Verbindungen es zu dieser ID gibt. Dieses daraus resultierende Array will/muss ich jetzt per JS weiterverarbeiten.
- Bei jeder ID wird zum Beispiel die Link Textfarbe geändert.

Jetzt meine Frage, wie schaffe ich es die Daten so per JS/Ajax abzufragen das ich sie dann per JS weiterverarbeiten kann? Ich finde nichts was mir da hilft, eine reine HTML Ausgabe bringt mir ja leider nichts.

--

Wenn sowas nicht möglich ist,könnte man ja die Datenbank ja schon von Anfang an in ein JS Array packen, wie stellt man das 'sauber' an? Ich kenne nur die Methode mit PHP quasi JS Code als Text zu generieren und ihn dann zwischen den <script> Tags auszugeben, nur das finde ich nicht sehr schön bzw. praktisch. Gibts da irgendwelche Tricks die ich nicht kenne?

Schonmal Danke für alle Tipps! Hoffe man kann mein Problem halbwegs nachvollziehen

- David
__________________
David Strauß - stravid.com
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 22.11.2008, 08:42
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Wertepaare ?

Einfach per HTTPRequest die db abfragen. Dort die Wertepaare so formatieren
daß JS die möglichst einfach (und zeitsparend) zerlegen und zuordnen kann (zB
Trennzeichen innerhalb eines Wertepaares "|", Wertepaare durch "||" trennen
und die dann einfügen.

Du kannst auch gleich den HTML-Output erzeugen und dann einfügen.

Es braucht dazu kein Ajax-Monstrum.

Code:
  if ( window.XMLHttpRequest) {
          httpreq = new XMLHttpRequest();
  } else {
          if ( window.ActiveXObject) {
                  try {
                          httpreq = new ActiveXObject( "Mxsml2.XMLHTTP");
                  } catch ( ex) {
                          try {
                                  httpreq = new ActiveXObject( "Microsoft.XMLHTTP");
                          } catch ( ex) { }
                  }
          }
  }

  function CreateReport(){
        SendRequest( "../bin/usquery.exe?CMD=HUHU", LGetAssociatedData);
  }
  function LGetAssociatedData() {
        if ( httpreq.readyState == 4) {
              document.getElementById("pdf").src = httpreq.responseText;
        }
  }
Mit der JS-Funktion wird in das Element pdf das Ergebnis der Abfrage als
HTML eingefügt. Der Code ganz am Anfang muß zu Programmstart laufen um
die HTTP-Request-Sache aufzusetzen.

Wenn es unbedingt in einem Array landen soll mußt Du die Antwort nochmal
zerlegen. Das geht dann über geschickt gewählte Trennzeichen. Leider sind
die JS-Befehle zur Stringbearbeitung recht dürftig ...
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator

Geändert von Scheppertreiber (22.11.2008 um 08:46 Uhr)
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 22.11.2008, 09:35
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Einfach per HTTPRequest die db abfragen. Dort die Wertepaare so formatieren
daß JS die möglichst einfach (und zeitsparend) zerlegen und zuordnen kann (zB
Trennzeichen innerhalb eines Wertepaares "|", Wertepaare durch "||" trennen
und die dann einfügen.
Du solltest dir mal die Links von VuuRWerK anschauen. Wenn du die Daten im JSON Format aufbereitest, brauchst du auf dem Client nur eval.

Und dein "Nicht-Ajax Monstrum" hat natürlich den Nachteil, dass da noch eine Menge Code fehlt (mal abgesehen von konzeptionellen Fehler - wenn du eine src Eigenschaft mit einer XML oder auch HTML Antwort füllst, wird i.d.R. nichts passieren)
Mit Zitat antworten
  #4 (permalink)  
Alt 22.11.2008, 09:40
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

ups - ich hatte das so bei mir rauskopiert ...

Code:
document.getElementById(name).innerHTML = content;
name ist der Name des Elements ...
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #5 (permalink)  
Alt 22.11.2008, 09:45
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
name ist der Name des Elements ...
Ich hoffe name ist die ID des Elementes, die meisten HTML Elemente besitzen kein Attribut name und bei den meisten die es haben bewirkt innerHTML nicht viel.
Mit Zitat antworten
  #6 (permalink)  
Alt 22.11.2008, 11:21
Benutzerbild von stravid
Human Compiler
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 16.01.2008
Ort: Austria
Beiträge: 186
stravid befindet sich auf einem aufstrebenden Ast
Standard

Wow, danke für die schnellen Antworten!

Bin jetzt soweit das ich in JS nurnoch die Antwort von PHP verarbeiten muss, da häng ich grad fest. In PHP erstelle ich ein JSON Array wenn ich das richtig verstanden habe, nur jetzt schaffe ich es nicht das Array dann in JS durchzugehen und die Werte auszugeben...

PHP Code
PHP-Code:
function getJumpRoutes()
    {
        
$planetID $this->input->post('planetID');
        
$planets = array($planetID'1''2');
        
        
$planetsJSON json_encode($planetID);
        echo 
$planetsJSON;
    } 
JS Code
Code:
function getJumpRoutes(planetID)
{
	var planets;
	new Ajax.Request(base_url + 'starmap/getJumpRoutes', {method:'post', postBody:'planetID='+planetID, onSuccess: function(transport)
		{
			planets = transport.responseText.evalJSON();
		}
	});
	
	alert("test2");
	
	for each(var planet in planets)
	{
		alert("test3");
		alert(planet.value.toString());
	}

}
Als JS Laie hab ich halt keine Ahnung wie man das am schönsten macht, in der for each happerts, meiner Meinung nach.

- David
__________________
David Strauß - stravid.com
Mit Zitat antworten
  #7 (permalink)  
Alt 22.11.2008, 15:48
Benutzerbild von stravid
Human Compiler
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 16.01.2008
Ort: Austria
Beiträge: 186
stravid befindet sich auf einem aufstrebenden Ast
Standard

Code:
function getJumpRoutes(planetID)
{
	
	new Ajax.Request(base_url + 'starmap/getJumpRoutes', {method:'post', postBody:'planetID='+planetID, onSuccess: function(transport)
		{
			alert(transport.responseText);
			var planets = transport.responseText.evalJSON();

			var l = planets.length;
			alert(l);
			var i;
			for (i = 0; i<l; i++)
			{
				alert(planet[i]['id']);
			}

		}
	});
Der Alert gibt die richtige Länge des Arrays aus, nur die for schleife interessiert ihn irgendwie nicht, da macht er nix... gibt einfach nicht die IDs aus
__________________
David Strauß - stravid.com
Mit Zitat antworten
  #8 (permalink)  
Alt 22.11.2008, 16:26
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Code:
planet[i]['id']
Die id in Hochkommas ? Ich nehme an, das erwartet eine Zahl als Index und keinen String ...
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #9 (permalink)  
Alt 22.11.2008, 16:32
Benutzerbild von stravid
Human Compiler
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 16.01.2008
Ort: Austria
Beiträge: 186
stravid befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Code:
planet[i]['id']
Die id in Hochkommas ? Ich nehme an, das erwartet eine Zahl als Index und keinen String ...
Das hat schon gepasst, habs kurzzeitig auf ein verschachteltes Array umgeschrieben, um es mit einem Tutorial zu vergleichen...

So:
Code:
function getJumpRoutes(planetID)
{
	new Ajax.Request(base_url + 'starmap/getJumpRoutes', {method:'post', postBody:'planetID='+planetID, onSuccess: function(transport)
		{
			alert(transport.responseText);
			
			var planets = transport.responseText.evalJSON();

			for(var i = 0; i <planets.length; i++)
			{
				alert(planets[i]);
			}
	
		}
	});
}
Geht es jetzt!
Nur eine Frage, wenn ich die var planets außerhalb des Ajax.Reqeusts intialisiere müsste die for schleife doch auch außerhalb funktionieren oder? Tut es bei mir aber nicht da er meint 'planets is not defined'. So meine ich es:

Code:
function getJumpRoutes(planetID)
{
var planets;
	new Ajax.Request(base_url + 'starmap/getJumpRoutes', {method:'post', postBody:'planetID='+planetID, onSuccess: function(transport)
		{
			alert(transport.responseText);
			
			planets = transport.responseText.evalJSON();	
		}
	});
for(var i = 0; i <planets.length; i++)
{
	alert(planets[i]);
}
}
Ich seh den Wald vor lauter Bäumen nicht mehr...
__________________
David Strauß - stravid.com
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 22.11.2008, 16:35
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

planets existiert nur innerhalb der Funktion getJumpRoutes(), dort ist sie als
var auch deklariert. Deklariere sie außerhalb, dann dürfen alle dran
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kann man via JQuery oder AJAX auf Daten in einer Datenbank zugreifen? tru2010 Javascript & Ajax 1 24.05.2011 23:41
Ausgabe geschieht nur einmal Benutzername Serveradministration und serverseitige Scripte 0 12.05.2011 15:59
Zweidimensionales assiziatives Array per Globals übergeben ASCII Serveradministration und serverseitige Scripte 3 04.11.2010 16:11
Daten per Ajax der Datenbank hinzufügen, IE bockt Nars Javascript & Ajax 10 24.08.2007 14:22
HTML in einer Datenbank per PHP bearbeiten trequ Serveradministration und serverseitige Scripte 3 17.07.2007 10:43


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:15 Uhr.