Jeg prøver lige igen med et tidligere spørgsmål, og har lavet det hele lidt om, så det burde være lettere at få et overblik over.
I en form, vælger man en side fra en select liste. Herefter kører der en JS funktion, som foretager et AJAX kald og opdaterer informationen i en anden select liste lige ved siden af.
Her er den select liste der har en onchange funktion:
- <form name="blah" method="post">
-
- <select name="side_type" class="tab_form_select_wide"
- style="display:inline;" onChange="hent_position_til_pdf(this.value);">
-
- <option value="nej"> ------ Hovedsider ------ </option>
- <option value="hoved/1"> - Hovedside 1 - </option>
- <option value="hoved/2"> - Hovedside 2 - </option>
- <option value="hoved/3"> - Hovedside 3 - </option>
-
- <option value="nej"> ------ Undersider ------ </option>
- <option value="under/1"> - Underside 1 - </option>
- <option value="under/2"> - Underside 2 - </option>
- <option value="under/3"> - Underside 3 - </option>
-
- <option value="nej"> ------ Modulsider ------ </option>
- <option value="modul/1"> - Modulside 1 - </option>
- <option value="modul/2"> - Modulside 2 - </option>
- <option value="modul/3"> - Modulside 3 - </option>
-
- </select>
-
-
- /* Når der er foretager et valg, så skal jeg have
- opdateret denne her liste med mulige positioner til den
- valgte side:
-
- DET ER DENNE LISTE DER GIVER MIG ET UNDEFINED INDEX I $_POST
- EFTER FORMEN ER OPDATERET VIA AJAX KALD, OG SUBMITTED
- ALMIDELIGT TIL SAMME SIDE VIA PHP
- */
-
- <span id="position">
- <select name="position" id="placering" class="tab_form_select_wide">
- <option value="nej"> - Vælg først en side - </option>
- </select>
- </span>
-
-
- </form>
Den JS funktion, der tager det ene parameter, ser således ud:
- function hent_position_til_pdf(side_type) {
-
- var qstring = "side_type="+side_type;
-
- //alert(qstring); return false;
-
- // OPRET HTTP REQUEST:
- if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); }
- else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
-
- xmlhttp.onreadystatechange = function()
- {
- if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
- {
- alert(xmlhttp.responseText);
- // alert viser fuld kode til select listen: SER FINT UD!
-
- // SPINNER GRAFIK TIL SPAN ID: POSITION:
- setTimeout(function(){ document.getElementById("position").innerHTML =
- "<img src=\"styles/loader.gif\" width=\"26\" height=\"26\"
- style=\"display:inline;\" />" + "<p style=\"display:inline;
- margin-left:15px; font-size:17px;\">" + "<b>Henter placeringer...
- </b></p>"; },100);
-
- // NY SELECT LISTE TIL SPAN ID: POSITION:
- setTimeout(function(){ document.getElementById("position").innerHTML =
- xmlhttp.responseText },500 );
- }
- }
- xmlhttp.open("GET", "ajaxPHP/moduler/pdf_position.php?"+qstring, true)
- xmlhttp.send()
- return false;
- }
Den PHP fil jeg kalder, tjekker querystringen, og returnerer relevante positioner alt efter om der er valgt en hovedside, underside eller en modulside:
- if (isset($_GET['side_type'])) {
-
- // Returner tom liste hvis der er valgt en "overskrift" fra select listen:
- if ( $_GET['side_type'] == 'nej' ) {
- echo '<select name="position" id="placering" class="tab_form_select_wide" style="display:inline;" onChange="hent_position_til_pdf(this.value);">
- <option value="nej"> - Vælg først en side - </option>
- </select>';
- exit();
- }
- else // UDSKRIV NY OPDATERET LISTE:
- {
-
- $bang = explode('/', $_GET['side_type']);
- $side_type = (string)$bang[0];
- $side_id = (int)$bang[1];
-
-
- $sql = "SELECT id FROM modul_pdf WHERE side_id = ? AND side_type = ?";
- $prep = mysqli_prepare($connection, $sql);
- mysqli_stmt_bind_param($prep, "is", $side_id, $side_type);
- mysqli_stmt_execute($prep);
-
- mysqli_stmt_store_result($prep);
-
- $rows = mysqli_stmt_num_rows($prep);
- $rows = $rows + 1;
-
- // UDSKRIV DEN NYE SELECT LISTE HER:
-
- echo '<select name="position" id="placering"
- class="tab_form_select_wide" style="display:inline;"
- onChange="hent_position_til_pdf(this.value);">';
-
- for ( $count = 1; $count <= $rows; $count++ )
- {
- echo '<option value="'.$count.'">'.$count.'</option>';
- }
- echo '</select>';
-
- }
- } // SLUT: if (isset($_GET['side_type']) && isset($_GET['id']))
Problemet er at efter jeg har kørt dette AJAX kald, så kan jeg se at den opdaterede select liste, fint kommer frem i formen, med de positioner der skal være der.
Men hvis jeg submitter formen, så kan jeg ikke få adgang til den nye select listes resultater via $_POST - Istedet for så får jeg en fejl:
Notice: Undefined index: position in C:\wamp\www\elvir\backend\includes\pdf.php on line 13
Linie 13 er der hvor jeg tager imod formens data efter den er submitted:
- // Har tjekket om formen er set ved isset(blah) osv osv
- $pos = $_POST['position'];
Hvordan kan det være at jeg ikke kan tilgå den ny indsatte select listes $_POST værdi, efter den er indsat via dette AJAX kald?? - Har ikke haft det problem før, men et eller andet må jeg jo gøre forkert.
Er der en derude der kan hjælpe mig med det?
EDIT EDIT EDIT:Det er en browser ting der går galt, da det virker i IE, men ikke i Firefox, chrome eller opera..
Hjælper det nogen??
/Klemme
Indlæg senest redigeret d. 02.11.2012 19:57 af Bruger #16555