• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Nachgeladene Daten werden vom Formular nicht berücksichtigt

nossitron

New member
Hallo zusammen,
ich habe ein Problem mit meinem Code den ich nicht nachvollziehen kann.

Ich habe 2 Dropdowns (A+B) wobei der Inhalt des zweiten (B) mittels AJAX bei Änderung des ersten (A) angepaßt wird.
Als Beipsiel:
Wähle ich in A z.Bsp. Farbe, wird in B nachgeladen: rot, gelb, etc.
Wähle ich in A z.Bsp. Muster, wird in B nachgeladen: gestreift, gepunkte, etc.

Das funktioniert soweit auch, schicke ich dann aber das Formular ab, kommt der Wert von B nicht an.

Nochmal deutlicher:
Ich lade das Formular und vorgegeben ist: A:Farbe, B:rot
Schicke ich das Formular ab, bekomme ich die Variablen für A & B und kann diese auswerten.
Ändere ich aber den Inhalt von A und B wird nachgeladen, dann wird das im Browser auch richtig angezeigt aber nach abschicken des Formulars kommt nur die Variable für A an, B ist verschwunden.

meine Funktion zum Nachladen sieht wie folgt aus:
Code:
function lade_zeugs( quelle, ersetzen, ziel, http_parameter ) {
    var h_id = document.getElementsByName( quelle )[0].value;
    var parameter = "aktion=ajax&z=" + ziel + "&h_id=" + h_id + http_parameter;
    var XMLHTTP = null;
    if ( window.XMLHttpRequest ) {
        XMLHTTP = new XMLHttpRequest();
    } else {
        XMLHTTP = new ActiveXObject( "Microsoft.XMLHTTP" );
    } 
    XMLHTTP.open( "POST", "script.php", false );
    XMLHTTP.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
    XMLHTTP.send( parameter );
    var rueckgabe = XMLHTTP.responseText;
    document.getElementById( ersetzen ).innerHTML = rueckgabe;
}

der HTML-Aufruf dazu sieht wie folgt aus:
HTML:
<select name="A" size="1" onchange="lade_zeugs( 'A', 'B_div', 'B', '&weitere_parameter')">
  <option value="1">farbe</option>
  <option value="1">muster</option>
<select>

<div id="B_div">
  <select name="B" size="1">
    <option value="1">rot</option>
    <option value="2">gelb</option>
  </select>
</div>

Wenn ich also A auf muster wechsel wird B ersetzt mit den neuen Werten. Schicke ich das Formular ab, kommt B nicht an.
Im Ajax-Block ist die Rückgabe ein kompletter <select>-Block, also nicht nur die Optionen.

Im voraus Danke für die Hilfe.

nossi
 
Hi,
eigentlich ist der Inhalt nicht so wichtig denn,
wenn ich folgendes habe:

PHP:
<?php
session_name("blabla");
session_start();
require_once( "../konfig.php" );
$x = 4;
...
?>

und bei $x=4 schon einen Breakpoint setze, dann fehlt bereits die POST-Variable B nach dem Abschicken des Formulars.
Sie kommt also definitiv nicht an.

Mit dem DOM-Inspector hab ich das Ersetzen geprüft und keinen Fehler feststellen können.
 
Ich glaube den Fehler gefunden zu haben.

Bei folgender Konstellation

HTML:
<div id="B_div">
  <select name="B" size="1">
    <option value="1">rot</option>
    <option value="2">gelb</option>
  </select>
</div>

habe ich per innerHTML den kompletten Inhalt von B_div ausgetauscht, also den kompletten <select></select>-Block.
Obwohl der neue Eintrag exakt identisch aufgebaut war, außer natürlich die Optionen, hat der Browser die Variable B trotzdem nicht mehr gekannt und damit auch nicht übertragen.

Jetzt habe ich es testweise so abgeändert, dass nur die Optionen innerhalb vom <select>-Block ausgetauscht werden. So funktioniert es.

Hat jmd. dafür vielleicht eine einleuchtende Erklärung?
 
Ich versuche heute Abend ein Beispiel zu kontruieren.
das ist ne sache von 5 min:
xxx.html
Code:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>xxx</title>
    <script>
      function lade_zeugs( quelle, ersetzen, ziel, http_parameter )
      {
        var h_id = document.getElementsByName( quelle )[0].value;
        var parameter = "aktion=ajax&z=" + ziel + "&h_id=" + h_id + http_parameter;
        var XMLHTTP = null;
        if ( window.XMLHttpRequest ) {
            XMLHTTP = new XMLHttpRequest();
        } else {
            XMLHTTP = new ActiveXObject( "Microsoft.XMLHTTP" );
        } 
        XMLHTTP.open( "POST", "xxx.txt", false );
        XMLHTTP.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
        XMLHTTP.send( parameter );
        var rueckgabe = XMLHTTP.responseText;
        document.getElementById( ersetzen ).innerHTML = rueckgabe;
      }
    </script>
  </head>
  <body>
    <form method="post" name="xxx" action="xxx.php">
      <select name="A" size="1" onchange="lade_zeugs( 'A', 'B_div', 'B', '&weitere_parameter')">
        <option value="1">farbe</option>
        <option value="1">muster</option>
      <select>
      
      <div id="B_div">
        <select name="B" size="1">
          <option value="1">rot</option>
          <option value="2">gelb</option>
        </select>
      </div>
      <input type="submit" value="Los!" />
    </form>
  </body>
</html>
xxx.txt
Code:
<select name="B" size="1">
  <option value="3">gestreift</option>
  <option value="4">gepunkte</option>
</select>
xxx.php
Code:
<?php 
  print_r($_POST);
?>
ausgabe bei mir:
Code:
Array ( [A] => 1 [B] => 3 )
 
Zurück
Oben