Ajax Function geht im Explorer nicht

soa

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein kleiner Problem mit dem Explorer 7 . Naja hab nur den 7er auf meinem Rechner.

Szenario: Ich habe ein Eingabefeld "motiv" . bei Eingabe lade ich Motive aus einer DB.
Diese werden dann in ein Feld mit der ID motivauswahl geladen.

Das funktioniert auch im Explorer. Nun soll bei einem Click auf ein geladenes Motiv dieses aus der DB geladen und angezeigt werden.

Im Firefox klappt das auch wunderbar. Im Explorer wird eine leere Anfrage an den Server gesendet.

Code:

PHP:
function uebernehmMotiv() {

 if (http != null) {
   http.open("POST", "ausgabe.php", true);
   http.onreadystatechange = motivAusgabe;
  http.setRequestHeader(
      "Content-Type",
      "application/x-www-form-urlencoded");
   http.send("motivausgabe="+document.f5.motivauswahl.value);
   
   }
 //}
}

function motivAusgabe() {
   if (http.readyState == 4) {
      document.getElementById("motivausgabe").innerHTML =
      http.responseText;
   }
}

In der Datei ausgabe.php  habe ich noch diese Funktion:

function uebernehmMotiv() {
 document.f5.motivwahl.value =  document.motivauswahl.value ;
}

Das Feld  motivauswahl ebenfalls:

$text = "<select name='motivauswahl'  size = '11' onClick = 'uebernehmMotiv()'>";

Ich weiss hier wirklich nicht weiter. Möglicherweise haben die Spezis einen Tipp :)

Viele Grüße
 
Daran liegt es leider nicht. Der Event Handler wird gestartet.
Die PHP Datei auf dem Server wird ja auch gestartet, nur ist der Wert , der via POST übergeben wird, leer.

Also:

function uebernehmMotiv() {
document.f5.motivwahl.value = document.motivauswahl.value ;
}

Das funktioniert nicht. Das Selekt Feld, welches ich dynamisch vom Server lade, wird im IE einfach nicht erkannt, wenn man auf einen Wert klickt. Dabei läuft es im Firefox einwandfrei :confused:
 
Die Frage dabei ist nicht unbedingt, ob der Event feuert, sondern wann er feuert.
Das Senden funktioniert bei mir im IE jedenfalls einwandfrei....du kannst das überprüfen, indem du mal einen statischen Wert übermittelst.
 
Ja, du hast recht. Wenn ich einen statischen Wert der Funktion zuweise, so wird dieser übermittelt.

Wahrscheinlich wird die Übertragung zu früh gestartet und es stehen noch keine Daten zur Verfügung.

Warum muss der IE aber auch immer so rumzicken...

Hast du vielleicht noch einen Tipp, wie ich es richten könnte ?

Wäre echt klasse...
 
Ja, das habe ich natürlich sofort gemacht, als Du mir den Tipp gabst.
Hat aber leider nicht funktioniert. Die Funktion wird ja auf dem WebServer
über PHP aufgerufen. Habe es auch gleich noch mit anderen Handlern getestet,
beim IE wird nichts übertragen.
 
was stehen denn da für Werte in der Liste, welche übermittelt werden sollen?
Kann man das Ganze Online betrachten, vielleicht lässt sich so eher der Fehler finden?
 
Vielen Dank für die Unterstützung. Die Daten stehen nicht online, aber anbei mal die betreffenden Funktionen. Die Werte werden aus einer DB geladen.

Zuerst der betreffende Ajax Code:

Diese Funktion sendet den Inhalt des Textfeldes "motiv" an den Server. Die Rückgabewerte werden an ein leeres Feld mit der ID motivwahl zurückgegeben:


PHP:
function motivSuche() {
if (document.f5.motiv.value != ""){
if (http != null) {
   http.open("POST", "ausgabe.php", true);
   http.onreadystatechange = setMotiv;
   http.setRequestHeader(
      "Content-Type",
      "application/x-www-form-urlencoded");
   http.send("motiv="+document.f5.motiv.value);
    //}
}//end if

}//end if
} //function



function setMotiv() {
     if (http.readyState == 4) {
      document.getElementById("motivwahl").innerHTML =
     http.responseText;
   }
}

Die entsprechende PHP Funktion:

PHP:
<?php

if (isset($_POST['motiv']))
{
dbVerbinden();
$s = $_POST['motiv']; 

if ($s != "")
{

$result = mysql_query("SELECT * FROM motive") or die (mysql_error());

$text = "<select name='motivauswahl'  size = '11' onChange = 'uebernehmMotiv()'>";
$text .=  "<option>Bitte ein Motiv anklicken.</option>";
while ($row = mysql_fetch_array($result))
{
$trefferpos  = strpos($row['keyword1'],$s);
$trefferpos1 = strpos($row['name'],$s);
$trefferpos2 = strpos($row['keyword2'],$s);
$trefferpos3 = strpos($row['keyword3'],$s);

if (($trefferpos == 0) && ( is_integer($trefferpos))OR  ($trefferpos2 == 0) && ( is_integer($trefferpos2))
  OR ($trefferpos3 == 0) && ( is_integer($trefferpos3)) OR ($trefferpos1 == 0) && ( is_integer($trefferpos1)))
{
$bol = true;
$text .=  "<option> <b>" .$row['name']."</b> / Motiv ". $row['keyword1']."</option>";
}
}//while
if (!$bol)
{
$text .= "<option>Es wurde kein passendes Motiv gefunden. </option>"; 
$text .= "<br>"; 
$text .= "<option>Benutzen Sie bitte die Buttons f&uuml;r die Motivsuche. </option>"; 
}
mysql_close();
$text .= "</select>";
echo $text;

}

}//end if

?>

Soweit funktioniert auch alles im Explorer. Die Daten werden dynamisch ausgegeben.
Jetzt muss bei einem Click in die ausgegebene Liste das ausgewählte Element geladen werden. Die funktioniert im Firefox , aber nicht im IE .

Noch einmal der Ajax Code:

PHP:
function uebernehmMotiv() {

//if (document.motivwahl.value != ""){
//alert(document.getElementById(motivwahl));
 //document.f5.motiv.value = document.motivauswahl.value;
 if (http != null) {
   http.open("POST", "ausgabe.php", true);
   http.onreadystatechange = motivAusgabe;
  http.setRequestHeader(
      "Content-Type",
      "application/x-www-form-urlencoded");
   http.send("motivausgabe=testest");
   
   }
 //}
}

function motivAusgabe() {
   if (http.readyState == 4) {
      document.getElementById("motivausgabe").innerHTML =
      http.responseText;
   }
}

Die verarbeitende Funktion auf dem Server:
Dazu sei gesagt, dass hier noch etwas zum Thema Sicherheit getan werden muss.

PHP:
if (isset($_POST['motivausgabe']))
{

$motiv = $_POST['motivausgabe'];

dbVerbinden();
var_dump($_POST['motivausgabe']);
var_dump($_POST);
echo $motiv;
$result = mysql_query("SELECT * FROM motive WHERE
                        name  LIKE '%$motiv' LIMIT 1") or die (mysql_error());
                        
mysql_close();                       

while ($row = mysql_fetch_array($result))
{
$_SESSION['motiv'] = $row['link']; 
}
?>
<div class= "hintrechts" >
Hier Ihr ausgew&auml;ltes Motiv:
<br>
</div>
<div class= "hint" >
<br>
<p><?php echo"<img src='$_SESSION[motiv]' alt=''  border=''></a>"; 
 echo $_SESSION['motiv'];
 ?></p>
</div>
<?php  }

Diese Funktion ist ebenfalls in der Server Datei :

PHP:
function uebernehmMotiv() {
 document.f5.motivwahl.value =  document.motivauswahl.value ;
}

Und zum Schluss noch der entsprechende HTML Code:

PHP:
<div class="trenner" onclick= "sendButton1(), hideTooltipp()" onMouseOver="showTooltipp('6')" onMouseOut="hideTooltipp()" >Ein Motiv f&uuml;r die Anzeige aussuchen: </div>
 
 <div class ="trenneru">
<tr>
<span id ="button"></span>

<?php
 if ($_SESSION['a'])
{
echo'<p><a class="button" href="motivsuche.php?motiv='.ereg_replace(" ", "", $_SESSION['a']).'">Motive '.$_SESSION['a'].'einsehen.</a></p>';
}
?>

<br>
<td>
<a class="button" href="motiv.php">Alle Motive einsehen</a>
<br>
</td>
</tr>
<tr>
<td class="trenneru">
<form id="f5" action="motivsuche.php" method="get" name="f5" onKeyUp = "motivSuche()">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
			<td>
		<p>Motiv suchen: </p>
	</td>
  <td><input class="rahmen" type="text" name="motiv" size="24"></td>
  <td ><input class="buttonhint" type="submit" name="bb" value="Motiv suchen"></td>
  
		</tr>
		</table>
		<div id ="motivwahl"></div>
	</form>
</td>
</tr>
</table>
</td>
  </div>

Das ist der komplette Code ....

Ich hoffe, das es OK ist, wenn ich den Code poste.
 
Ich muss gestehen, es ist recht schwer, dort durchzublicken :)

Da es aber im FF lt. deiner Angabe funktionieren soll, hätte ich folgenden Verdacht:

Code:
http.send("motivausgabe="+document.f5.motivauswahl.value);

damit willst du ja den ausgewählten Wert jener Liste übergeben(nehme ich an):
PHP:
$text = "<select name='motivauswahl'  size = '11' onChange = 'uebernehmMotiv()'>";
$text .=  "<option>Bitte ein Motiv anklicken.</option>";
while ($row = mysql_fetch_array($result))
{
$trefferpos  = strpos($row['keyword1'],$s);
$trefferpos1 = strpos($row['name'],$s);
$trefferpos2 = strpos($row['keyword2'],$s);
$trefferpos3 = strpos($row['keyword3'],$s);

if (($trefferpos == 0) && ( is_integer($trefferpos))OR  ($trefferpos2 == 0) && ( is_integer($trefferpos2))
  OR ($trefferpos3 == 0) && ( is_integer($trefferpos3)) OR ($trefferpos1 == 0) && ( is_integer($trefferpos1)))
{
$bol = true;
$text .=  "<option> <b>" .$row['name']."</b> / Motiv ". $row['keyword1']."</option>";
}
}//while
if (!$bol)
{
$text .= "<option>Es wurde kein passendes Motiv gefunden. </option>"; 
$text .= "<br>"; 
$text .= "<option>Benutzen Sie bitte die Buttons f&uuml;r die Motivsuche. </option>"; 
}
mysql_close();
$text .= "</select>";
echo $text;


....aber: die <option>'s dieser Liste haben keine value-Attribute.
Anders als Mozilla übermittelt der IE dann nicht automatisch den Inhalt der <option>....sondern garnichts:eek:
Um den Inhalt der Optionen (nicht den value) browserübergreifend anzusprechen, gehe so vor:
Code:
http.send("motivausgabe="+document.f5.motivauswahl.options[document.f5.motivauswahl.selectedIndex].text);
....die Eigenschaft der Option's, die du benötigst, heisst also "text".
Beachte aber, dass du diese Eigenschaft wie im Code oberhalb ermitteln musst, ein simples
Code:
document.f5.motivauswahl.text
funktioniert im Gegensatz zu
Code:
document.f5.motivauswahl.value
...nicht!
 

Neue Beiträge

Zurück