Frage zu $.ajax.post und Formelemente als Array

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich habe ein Formular das ich über Ajax an ein PHP Script schicken möchte.
Eigentlich funktioniert es. Aber ich habe mehrere select Felder welche den Namen id haben (id[1], id[2] usw.
Die Auswertung wird dann bei PHP über ein Array gelöst. Nur wie bekomme ich die Daten mittels Ajax und per $_POST an das Script gesendet? Das klappt irgendwie nicht ganz.


Javascript:
<script>
  function attributeloader() {
$.ajax({
    url: 'test.php',
    data: document.getElementsByName(id),
    type: 'POST',
    cache: false,
        success: function(data) {
            $('#div').html(data);
        }
});
}
</script>

Danke euch vielmals.
 
Zuletzt bearbeitet von einem Moderator:
Hat geklappt dankeschön.
Nun ist mir aber was aufgefallen, was ich irgendwie umgehen muss.

In der eingebundenen test.php werden Variablen erstellt.
Leider sind diese aber nur in der test.php verfügbar. Die müssten doch, ähnlich wie bei einem include, für das ganze Script verfügbar sein?!

Das geht leider nicht:

PHP:
<div id="div"></div>
<?php echo $variable_aus_test_php; ?>

Gruss
 
Zuletzt bearbeitet:
Nein müssten sie nicht, da PHP auf dem Server ausgeführt und nicht im Client.

Dein erstes Script in welchem du deinen AJAX-REquest ausführst, ist ja zu diesem Zeitpunkt schon gerendert, also werden erst danach die Variablen aus dem Request verfügbar.
 
Ok hab verstanden danke dir.
Kann man dann vielleicht die Daten per Ajax an die momentane Seite schicken und auswerten?
Sodass ich keine separate Seite nachladen muss. Also ich befinde mich auf der Seite test.php und schicke ein Formular ab, ohne die Seite neu zu laden.

Ich hab das mal so versucht, aber es kommen keine Daten an:

HTML:
<script type="text/javascript">
  function attributeloader(dataid) {
$.ajax({
    url: 'test.php?id='+dataid+'',
    data: $("#attribute_load").serialize(),
    type: 'POST'
});
}
</script>

Hast Du eine Idee?
 
Javascript:
$("#loginform").submit(function() {
	inputField = $('#benutzername').attr('value'); //input-field für Benutzername
	inputField2 = $('#passwort').attr('value'); //input-field für Passwort
   	$.ajax({
   		type: "POST",
   		url: "pages/validate.php", //PHP-Datei, die alles auswertet
   		data: { username: inputField, password: inputField2 }, //Übergabe der Daten an die PHP-Datei
   		beforeSend: function() { //falls du etwas machen willst, was vor dem Senden geschieht...
			$("#loginsubmit").hide(); //Loginbutton verstecken
   			$("#loginload").show(); //ein Ladeicon
  		},
   		success: function(data){ //wenn eine Antwort kommt von der PHP-Datei
   			if(data=='ok')
   			{
     				//Ausgabe für "Login erfolgreich"
                                //Weiterleitung an die nächste Seite...
   			} else {
     				$("#loginload").hide(); //Ladeicon verschwindenlassen
      				$("#loginerror").show("fast"); //Login hat nicht funktioniert, anzeige
				$("#loginsubmit").show(); //Loginbutton wieder anzeigen
   			}
		}
	});
	return false;
});

Das Skript habe ich mal für einen Login geschrieben... Übergeben werden Benutzername und Passwort an eine PHP-Datei. Die kontrolliert die Daten (via Datenbank) und wenn sie stimmen, gibt sie "ok" zurück. (Wenn nicht irgendwas anderes, ist ja eigentlich ziemlich egal...)

Javascript:
success: function(data) { }
frägt die zurückkommenden Daten ab. Diese musst du in der PHP Datei mit echo ausgeben. (Es gibt da auch eine Möglichkeit mit json, aber damit kenne ich mich nicht aus...)

Soll nur als Beispiel dienen, du wirst es sicher ziemlich anders haben...

PS: In der PHP Datei habe ich absichtlich einen Zeitverzögerer eingebaut (sleep 1sek. glaub ich), damit das etwas schöner wirkt. So eine Abfrage geschieht normal in Millisekunden und dann kommt das Ladeicon nicht zur Geltung. :D
 
Zuletzt bearbeitet:
Danke Dir.
Aber irgendwie müsste es doch möglich sein, die zurückkommenden Daten per PHP wieder zu verwenden.
Ich schicke bstimmte Daten per POST an ein PHP Script. Das PHP Script wertet aus und nun?....
Wie kann ich die ausgewerteten Daten im Hauptscript nun verwenden? Da muss es doch eine Möglichkeit geben. Ich finde absolut nichts dazu.

Danke und Gruss
 
Naja, also das Prinzip ist ja folgendes:

- Du rufst z.b. index.php auf
- Diese Seite wird vom Server (da php-Script) ausgewertet, je nach gesetzten Parametern oder was auch immer (insofern Daten per POST/GET übergeben wurden)
- Sobald die Seite in deinem Browser steht, hat der Server nichts mehr damit zu tun. Jegliche PHP-Befehle wurden abgearbeitet
- Du schickst nun per AJAX eine Anfrage an ein ANDERES PHP-Script, welches dir eine Antwort sendet. Die Antwort kann z.B. sein "erfolgreich", "fehler", ... Kann man selber festlegen.

Es gibt auch die Möglichkeit, dass du zum Beispiel Benutzername und Passwort per Ajax an ein Script schickst. Dieses sucht dir die dazugehörige Email raus und gibt sie zurück.
Soll nur ein Beispiel sein, du kannst natürlich alles mögliche zurückgeben, bzw. auswerten lassen...
Allerdings habe ich das selber noch nie benutzt, da musst du auf die Antwort eines Spezialisten warten oder dich auf http://jquery.com umschauen, bei Tutorials -> Ajax.

Gruß
 
Danke euch für die Unterstützung.
Es klappt soweit alles super jetzt.
Aber eine Frage hätte ich noch und will deshalb keinen neuen Beitrag erstellen.

Meine Funktion sieht nun so aus:

HTML:
function attributes_get_group_id(pID) {
$.ajax({
    url: 'ajax/attributes/get_group_id.php?products_id='+pID+'',
    data: $("#attributes").serialize(),
    type: 'POST',
    success: function(data) {

               attributes_set_products_price(data, pID);
               attributes_set_products_model(data, pID);
        }
});
}

Die Rückgabe der PHP Datei ist folgendermaßen:

PHP:
echo $group_id;

Und wird an die 2 Funktionen weiter gegeben.
Wäre es denn möglich, einen weiteren Wert zurückzugeben mit dem ich dann in der Funktion weiterarbeiten kann?

Also z.b.

PHP:
echo $group_id;
echo $uprid;

Wenn ja wie komme ich an die einzelnen Werte ran?

Vielen Dank.
 
Ja ist möglich, glaube ich. Weiß nur nicht wie. Du könntest aber einen Array zurückgeben, soweit ich weiß.
 

Neue Beiträge

Zurück