Ajax IE Problem

magnificent

Mitglied
Hallo,
ich hab ein Problem mit einer Ajax Anwendung im IE, beim Firefox funktioniert alles...

Ich habe eine Tabelle mit Daten und in jeder <tr> hängt eine Funktion, die per Klick aufgerufen wird:

HTML:
<tr javascript: onclick="sndReq2('.$row['testat_id'].')">
die zugehörige Funktion:

Code:
function sndReq2(klick) {
    resObjekt.open('get', 'testat_anlegen.php?von='+klick,true);
    resObjekt.onreadystatechange = handleResponse;
	resObjekt.send(null);
}

In der zugehörigen php-Datei (befindet sich im selben Script) wird nun eine SQL-Abfrage gemacht und dann ein Formular mit Tabelle (für die Strukturierung) ausgegeben.

PHP:
if($_REQUEST['von'])
{

$sql = "SELECT testat_id, testat_bez, start_datum, end_datum FROM tbl_testat where testat_id = ".$_REQUEST['von'];

$result = do_sql($sql);
while ($row = mysql_fetch_array($result, MYSQL_BOTH))
{	
$startdatum_unix=strtotime($row['start_datum']);
$startday=date("dd",$startdatum_unix);
$startmonth=date("mm",$startdatum_unix);
$startyear=date("YYYY",$startdatum_unix);

if ($row['end_datum']){
$enddatum_unix=strtotime($row['end_datum']);
$endday=date("dd",$enddatum_unix);
$endmonth=date("mm",$enddatum_unix);
$endyear=date("YYYY",$enddatum_unix);
}



echo'

<form id="testat_anendern" method="post" action="admin.php?site=testat_anlegen">
<input type="hidden" name="testat_id" maxlength="75" value="'.$row['testat_id'].'" />
<table>
	<tr>
	<td class="fragestellung" width="40%">Testatbezeichnung: </td><td class="fragestellung" width="60%"><input type="text" name="testatbez" maxlength="75" value="'.$row['testat_bez'].'" /></td>
	</tr>
	<tr>
	<td class="fragestellung" width="40%">Startdatum (dd mm yyy): &nbsp;</td><td class="fragestellung" width="60%">
	<input type="text" name="start_day" class="date" maxlength="2" value="'.$startday.'" />
<input type="text" name="start_month" class="date" maxlength="2" value="'.$startmonth.'" />
<input type="text" name="start_year" class="year" maxlength="4" value="'.$startyear.'" /></td>
	</tr>
	<tr>
	<td class="hinweis" width="40%">Enddatum (dd mm yyy): * </td><td class="fragestellung" width="60%">
	<input type="text" name="end_day" class="date" maxlength="2" value="'.$endday.'" />
<input type="text" name="end_month" class="date" maxlength="2" value="'.$endmonth.'" />
<input type="text" name="end_year" class="year" maxlength="4" value="'.$endyear.'" /></td>
	</tr>
</table>
<br />
	<table>
	<tr>
	<td  width="50%"><input type="reset" value="Abbrechen" class="button" /></td><td width="50%"><input type="submit" name="Aendern" value="Testat aendern" class="button" /></td>
	</tr>
	</table>
</form>';

	}
}

Wenn man im IE nun die <tr> anklickt, wird das Formular auch Ausgegeben, doch wenn ich die Daten in der DB ändere dann ändern sich die Daten in dem Formular nicht, dort werden immer noch die alten Daten vom ersten onclick() angezeigt - aber das die Daten geändert wurden sieht man in der Tabelle, auf die der onclick() ausgeführt wurde- halt nur nicht im Formular :(
Wenn man den Cache lehrt und dann nochmal die Seite aufruft und den onclick macht, werden die aktualisierten Daten angezeigt.

2.Problem:
Das 'generierte' Formular führt seine Funktion (ein update) nicht aus.

Aber alle 2 Problem treten nur im IE auf.
Ich hoffe man versteht was ich meine, es ist irgendwie schwer zu beschreiben.

Mfg :)
p.s.: Ist es eigentlich normal das man die per Ajax eingeügten Daten nicht per ViewSource sehen kann? Da ist immer nur der <span> Container (ist im IE und Firefox so).
 
Hänge an die Adresse des angefragten Skriptes als Parameter einen aktuellen Timestamp ran...dann wird es auch von der Originaladresse und nicht aus dem Cache geladen ;)
 
hallo, erstmal danke für die antwort :)
nur weiß ich nicht genau, wie das geht

HTML:
$timestamp = time();
<tr javascript: onclick="sndReq2('.$row['testat_id'].','.$timestamp.')">

Code:
function sndReq2(klick,time) {
    resObjekt.open('get', 'testat_anlegen.php?von='+klick+'&time='+time,true);
    resObjekt.onreadystatechange = handleResponse;
	resObjekt.send(null);
}

Und nun nochmal im Auswertungsteil? Oder wie?
Löst das denn auch das 2.Problem?

Ach, wenn nur alle den Fox nutzen würden ;)
Mfg
 
Folgendes sollte ausreichen:
Code:
function sndReq2(klick) {
    resObjekt.open('get', 'testat_anlegen.php?von=' + klick + '&time=' + new Date().getTime(),true);
    resObjekt.onreadystatechange = handleResponse;
	resObjekt.send(null);
}

...Timestamps gibts schliesslich auch in JS... ansich gehts ja auch mehr darum, einen einzigartigen Parameter in der URL zu haben, damit die Sache von der Originaladresse geladen wird...und da ist so ein Timestamp das Praktischste, da er sich in JS jede Millisekunde ändert :)

Dein Beispiel würde wiederum nichts bringen, da der Timestamp von PHP aus kommt und sich somit nicht mehr ändert, solange die Seite nicht neu geladen wird.
 
Danke :)

Hab dann noch auf Aktualität geprüft

PHP:
$timestamp = time();
if($_REQUEST['von'] && $_REQUEST['time'] != $timestamp)
{

Hättest du auch noch nie Idee für das 2. Problem?

Also das Formular zur Änderung ist vorhanden, aber es wird weder das update noch irgendwelche Fehlermeldungen (bei nicht erfolgreichem Update) ausgegeben.

Edit:
Habe gerade festgestellt, das die Werte immer 2mal da stehen (in den Formularfeldern) und da es sich um Datumsangaben handelt, fange ich sowas natürlich ab und das Script kommt nicht mal bis zum Update.

Aber warum stehen die Werte 2mal drin?

Edit2:
Habs nun raus bekommen.
Danke dir vielmals :)
 
Zuletzt bearbeitet:
Morgen.

Code:
function handleResponse()
	{
	if (resObjekt.readyState == 4)
		{
		document.getElementById("testat_change").innerHTML = resObjekt.responseText;
		}
	}
 

Neue Beiträge

Zurück