dedlfix: jQuery Formular abschicken & wieder einbleden

Beitrag lesen

Tach!

Am besten erstellst du dazu ein (assoziatives) Array und packst das mit json_encode() ein. Dem jQuery.ajax auf der anderen Seite sagst du mittels dataType-Option, dass du JSON zurückschickst. Du bekommst dann ein fertig ausgepacktes Objekt, das du ohne weitere Schritte verwenden kannst.

Ab hier verstehe ich leider gar nichts mehr :/ Hast du mir hier vielleicht ein kleines Beispiel?

Das was du mit dem PHP-Script auf die Ajax-Anfrage ausgibst, ist das was du am Client auswerten musst. Du kannst da einen Text antworten, aber wie wertest du den aus? Du willst ja zum Beispiel Fehlermeldungstexte schicken, die Feldern zugeordnet werden sollen. Wie aber erkennst du in einer Textwurst, welche Teile was bedeuten? Die Lösung ist, dass die Textwurst eine konkrete Struktur haben muss, beispielsweise mit | getrennte Texte. Das geht aber nur solange gut, bis ein | in den Daten auftaucht. Man kann sich nun selbst Maskierungsregeln ausdenken, um das Poblem zu lösen. Es gibt aber auch Datenaustauschformate, die schon lange im Einsatz sind, beispielsweise CSV, XML, JSON. Du packst am besten deine Daten (zum Beispiel ein Array mit den Meldungen) auf PHP-Seite in JSON ein und am Client wieder aus. jQuery übernimmt das auf Clientseite bereits für dich. PHP macht es dir aber auch nicht schwer:

$result = [
  'errors' => [
     ['name' => 'feld1', 'messages' => ['meldung11', 'meldung12']],
     ['name' => 'feld2', 'messages' => ['meldung21', 'meldung22']],
  ],
  'anderes_zeug' => ...
];

echo json_encode($result);

Client:

$.ajax({
  type: "POST",
  url: "senden.php",
  data: { ... },
  dataType: 'json',
}).done(function (result) {
  console.log('alles auf einmal:');
  console.log(result);

  console.log('die fehler einzeln:');
  result.errors.forEach(function (item) {
    console.log(item.name);
    item.messages.forEach(function (message) {
      console.log(message);
    });
  });
}).fail(function (xhr, status, error) {
  // was auch immer
  console.log(status);
  console.log(error);
});

dedlfix.