Erledigt: form submit / target container angeben?

 


honsey
Gast

06.04.11
15:10 Uhr
Es gibt bei jQuery ja eine Funktion mit der man eine Seite in einen Container laden kann:
  1. jQuery('#zielcontainer').load(target.html);
Quelltext in Zwischenablage kopieren

zusätzlich kann man dort den Container (#gewuenschte_inhalte) der Seite angeben, die man in den #zielcontainer laden möchte (um z.B. nicht die Header, etc mitreinzuladen)
  1. jQuery('#zielcontainer').load('target.html #gewuensche_inhalte');
Quelltext in Zwischenablage kopieren

Gibt es eine Möglichkeit das ganze für form-submits zu machen? Also ein Form per jQuery abschicken, und nur einen Container der aufgerufenen Seite in einen Container der Seite zu laden, auf der das Form sitzt?
Link zu diesem Beitrag in die Zwischenablage kopieren
Mister Ad
Werbung
Schon mal bei Zalando, Amazon oder eBay geguckt? Vielleicht wirst du dort fündig.

 
loeffler
Veteran

06.04.11
15:43 Uhr
Ich weiß jetzt nich, ob ich deine Frage richtig verstanden habe. Meinst du sowas?
  1. $("form").submit( function(e) {
  2. jQuery('#zielcontainer').load('target.html #gewuensche_inhalte', { name: $("#name").val(), blub: $("#bla").val() });
  3. });
Quelltext in Zwischenablage kopieren

Also einfach die Felder des Formulars per load als Parameter übergeben.
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

06.04.11
21:32 Uhr
das wäre auf jedenfall eine gute notlösung. müsste dann in der betreffenden target.html (bzw. ist das bei mir natürlich ein phpscript) alle $_POST durch $_GET ersetzen, oder?

lieber wäre es mir natürlich mit einer art:
  1. $("form").submit( function(e) {
  2. jQuery('#zielcontainer').post('target.html #gewuensche_inhalte');
  3. });
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
loeffler
Veteran

06.04.11
21:43 Uhr
Du kannst natürlich auch einfach die Parameter als GET an die URL hängen

  1. jQuery('#zielcontainer').post('target.html?name='+$("#name").val()+'&foo='+$("#foobar").val()+' #gewuensche_inhalte');
Quelltext in Zwischenablage kopieren
Sollte auch gehen.

Alternativ könntest du auch in deiner Zieldatei die $_POST Variablen durch $_REQUEST ersetzen. Damit bekommst du sowohl $_POST als auch $_GET (und nebenbei auch noch $_COOKIE).
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

06.04.11
22:34 Uhr
löffler – danke für deine tipps. ich bin per zufall hierauf gestossen: http://api.jquery.com/jQuery.post/
  1. $.post("test.php", $("#testform").serialize());
Quelltext in Zwischenablage kopieren

…ausserdem steht da:
Example: Alert out the results from requesting test.php (HTML or XML, depending on what was returned).
  1. $.post("test.php", function(data) {
  2. alert("Data Loaded: " + data);
  3. });
Quelltext in Zwischenablage kopieren

wenn man das kombiniert, bekommt man sowas in der art:
  1. jQuery('#form input').change( function(){
  2. jQuery.post(
  3. jQuery('#form').attr('action'), //url holen
  4. jQuery('#form').serialize(), //daten ziehen
  5. function(data){
  6. var content = jQuery(data).find('#zielcontainer'); //aus der rückgegebenen seite den #zielcontainer speichern
  7. jQuery("#zeilcontainer").html(content); //einpflanzen
  8. });
  9. });
Quelltext in Zwischenablage kopieren

funktioniert love

hab nur einen bug irgendwo drin… das aber in einem anderen topic
Link zu diesem Beitrag in die Zwischenablage kopieren
loeffler
Veteran

06.04.11
23:08 Uhr
Kein Problem. Aber deine Lösung ist doch nichts anderes als

  1. $("#form").submit( function(e) {
  2. e.preventDefault();
  3. $('#zielinhalt').load( $('#form').attr('action')+' #inhalt', $('#form').serialize());
  4. });
Quelltext in Zwischenablage kopieren

in umständlich. ;-)

(man könnte auch hier Problemlos change() statt submit() benutzen, dann brauchts das preventDefault() auch nicht mehr)
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

06.04.11
23:29 Uhr
love

pee

danke

//edit: zu früh gefreut – load() kann anscheinend nur POST senden, wenn die daten als object übergeben werden. das macht serialize() anscheinend nicht.
Link zu diesem Beitrag in die Zwischenablage kopieren
loeffler
Veteran

07.04.11
00:03 Uhr
serialize() hat damit erstmal nichts zu tun. Das serialisiert die entsprechenden Daten einfach, also packt sie kompakt zusammen.

Wenn man jetzt bei load() den Parameter data setzt, sendet das die Daten als POST. Aber da du bei deiner Lösung ja auch jQuery.post() anstatt jQuery.get() verwendet hast, bin ich davon ausgegangen, dass du dafür eine Lösung gefunden hast und die Daten als POST senden wolltest. ;-)

Da serialize() die Daten in die Form foo=1&bar=2 umwandelt, könntest du das aber auch einfach an die URL hängen:

  1. $('#zielinhalt').load( $('#form').attr('action') + '?' + $('#form').serialize() +' #inhalt');
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

07.04.11
00:33 Uhr
soweit ich das verstehe versendet .post() alle daten als POST, egal in welchem format sie eingespeist werden.

.load() sendet anscheinend standardmässig als GET, es sei denn man legt die daten als object vor.

wie müsste denn das .load() aussehen, damit es POST sendet?
Link zu diesem Beitrag in die Zwischenablage kopieren
loeffler
Veteran

07.04.11
20:20 Uhr
Huch sorry, ich hab deinen zweiten Beitrag irgendwie nicht richtig gelesen und bin davon ausgegangen, du wolltest es jetzt auch per GET senden. pee

Ich bin eigentlich davon ausgegangen, dass wenn man bei load() den zweiten Parameter data setzt, immer per POST gesendet wird, egal in welcher Form die Daten geliefert werden, aber anscheinend ist dem nicht so. Wenn load() für POST ein Object erwartet, musst du serializeArray() benutzen. Damit gehts:

  1. $('#zielinhalt').load( $('#form').attr('action') + ' #inhalt', $('form').serializeArray() );
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

07.04.11
23:36 Uhr
das probiere ich morgen mal! danke
Link zu diesem Beitrag in die Zwischenablage kopieren
 
#