AJAX Problem mit IE7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • oh sorry das hab ich vergessen zu sagen ... wenn ich aufdie einzelnen menü buttons drücke passiert im firefox und ie6 was aber nicht im ie7.

    Am besten mal angucken ;)

    ah und nochwas wenn man dann im firefox / ie6 auf projekte klick dann Matthias Kloe auswählt und dann links auf das erste Rechteck klickt starten 2 requests per onClick, da ich was in zwei verschiedenen divs anzeigen möchte.
    Allerdings wird der erste request ausgeführt und nicht anzeigt der zweite wird auch ausgeführt aber angezeigt. Es kommt auch keien fehler meldung im bugzilla (addon javascript debugger). Es scheint so als würdes das erste verschwinden sobald das zweite ausfegührt wird. Bzw das endresultat an der stelle radystat 4 wird nicht in content übergeben

    Also irgendwie scheinen die aufeinander zu prallen. ich hab jetzt für die zweite mal 100 ml verzögerung mir reingemacht und schon gehts.

    Jmd ne bessere Lösung?


    ausgeführt werden showProjekt(7); und showProjektText(7);

    Quellcode

    1. function showProjekt(str)
    2. {
    3. xmlHttp=GetXmlHttpObject();
    4. if (xmlHttp==null)
    5. {
    6. alert ("Your browser does not support AJAX!");
    7. return;
    8. }
    9. var url="request.php?";
    10. url=url+"sid="+Math.random();
    11. xmlHttp.onreadystatechange=stateChangedProjekt;
    12. xmlHttp.open("POST",url,true);
    13. xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    14. xmlHttp.send('operation=content&projektId='+str);
    15. }
    16. function stateChangedProjekt()
    17. {
    18. if (xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3 )
    19. {
    20. document.getElementById("content").innerHTML='<div id="load"></div>';
    21. }
    22. if (xmlHttp.readyState==4)
    23. {
    24. document.getElementById("content").innerHTML=xmlHttp.responseText;
    25. }
    26. }
    27. function showProjektText(str)
    28. {
    29. xmlHttp=GetXmlHttpObject();
    30. if (xmlHttp==null)
    31. {
    32. alert ("Your browser does not support AJAX!");
    33. return;
    34. }
    35. var url="request.php?";
    36. url=url+"sid="+Math.random();
    37. xmlHttp.onreadystatechange=stateChangedProjektText;
    38. xmlHttp.open("POST",url,true);
    39. xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    40. xmlHttp.send('operation=contentText&projektId='+str);
    41. }
    42. function stateChangedProjektText()
    43. {
    44. if (xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3 )
    45. {
    46. document.getElementById("foot2").innerHTML='<div id="load"></div>';
    47. }
    48. if (xmlHttp.readyState==4)
    49. {
    50. document.getElementById("foot2").innerHTML=xmlHttp.responseText;
    51. }
    52. }
    Alles anzeigen
  • Du solltest das <selects> nicht einfach so mit innerHTML befüllen.
    Eigentlich gabs da schon Probleme mit dem IE6 - sehr merkwürdig, dass es bei dir klappt.

    Quellcode

    1. function showContent(str)
    2. {
    3. xmlHttp=GetXmlHttpObject();
    4. if (xmlHttp==null)
    5. {
    6. alert ("Your browser does not support AJAX!");
    7. return;
    8. }
    9. var url="request_content.php?modul=";
    10. url=url+str;
    11. url=url+"&sid="+Math.random();
    12. xmlHttp.onreadystatechange=stateChanged;
    13. xmlHttp.open("POST",url,true);
    14. document.getElementById("auswahlDetail").innerHTML="";
    15. document.getElementById("auswahlGrob").style.display="none";
    16. document.getElementById("auswahlGrob").innerHTML="";
    17. xmlHttp.send(null);
    18. }
    Alles anzeigen

    Du kannst das ganze mit DOM lösen oder indem du eben eine DIV box verwendest und das select neben den option feldern mitbefüllst.

    Außerdem solle man bei DOM Operationen immer auf gültiges HTML achten.
    http://validator.w3.org/check?uri=http%3A%2F%2Fsbit.dyndns.biz%3A9005%2F
  • schonmal danke für die bisherige hilfe

    So das hab ich geändert jetzt wird das hier übergeben.

    Quellcode

    1. <select onchange="showAuswahlDetail('detail');" name="projektKunde">
    2. <option value="0">Bitte ausw&auml;hlen</option>
    3. <option value="0"><hr /></option>
    4. <option>Matthias Kloe</option>
    5. </select>


    Allerdings wenn ich jetzt Matthias Kloe auswähle und dann mit dem option value arbeiten will wird der nur als undefine übergeben(laut firebug). str = 'projekt' wird aber korekt übergeben.

    Quellcode

    1. function showAuswahlDetail(str)
    2. {
    3. xmlHttp=GetXmlHttpObject();
    4. if (xmlHttp==null)
    5. {
    6. alert ("Your browser does not support AJAX!");
    7. return;
    8. }
    9. var url="request.php?";
    10. url=url+"sid="+Math.random();
    11. xmlHttp.onreadystatechange=stateChangedAuswahlDetail;
    12. xmlHttp.open("POST",url,true);
    13. xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    14. xmlHttp.send('operation='+str+"&projektKunde="+document.getElementById("auswahlGrob").value);
    15. }
    16. function stateChangedAuswahlDetail()
    17. {
    18. if (xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3 )
    19. {
    20. document.getElementById("auswahlDetail").innerHTML='<li><div id="load"></div></li>';
    21. }
    22. if (xmlHttp.readyState==4)
    23. {
    24. document.getElementById("auswahlDetail").innerHTML=xmlHttp.responseText;
    25. }
    26. }
    Alles anzeigen


    Den String baue ich mir so

    Quellcode

    1. $result = mysql_query($sql);
    2. ?>
    3. <select onchange="showAuswahlDetail('detail');" name="projektKunde">
    4. <option value="0">Bitte ausw&auml;hlen</option>
    5. <option value="0"><hr /></option>
    6. <?php
    7. while($row = mysql_fetch_array($result))
    8. {
    9. ?>
    10. <option value="<?php echo $row['projektKunde']; ?>"><?php echo $row['projektKunde']; ?></option>
    11. <?php
    12. }
    13. ?>
    14. </select>
    Alles anzeigen
  • danke d0nUt.

    Quellcode

    1. xmlHttp.send('operation='+str+"&projektKunde="+document.getElementById("auswahlGrob").value);


    ich hab vergessen das, dass select jah jetzt nicht mehr die id hat. aber ich hab immer noch versucht daher die option values zu nehmen daher kam dann der undefine.

    Das mach ich mit xml da müsste es dann gehn
    Ich hab noch ein Problem.



    Quellcode

    1. <li class="auswahlDetailClick" onClick="showProjekt(<?php echo $row['projektId']; ?>);showProjektText(<?php echo $row['projektId']; ?>); "></li>


    Wenn der onClick ausgeführt wird dann laufen die 2 requests los:

    Quellcode

    1. function showProjekt(str)
    2. {
    3. xmlHttp=GetXmlHttpObject();
    4. if (xmlHttp==null)
    5. {
    6. alert ("Your browser does not support AJAX!");
    7. return;
    8. }
    9. var url="request.php?";
    10. url=url+"sid="+Math.random();
    11. xmlHttp.onreadystatechange=stateChangedProjekt;
    12. xmlHttp.open("POST",url,true);
    13. xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    14. xmlHttp.send('operation=content&projektId='+str);
    15. }
    16. function stateChangedProjekt()
    17. {
    18. if (xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3 )
    19. {
    20. document.getElementById("content").innerHTML='<div id="load"></div>';
    21. }
    22. if (xmlHttp.readyState==4)
    23. {
    24. document.getElementById("content").innerHTML=xmlHttp.responseText;
    25. }
    26. }
    27. function showProjektText(str)
    28. {
    29. xmlHttp=GetXmlHttpObject();
    30. if (xmlHttp==null)
    31. {
    32. alert ("Your browser does not support AJAX!");
    33. return;
    34. }
    35. var url="request.php?";
    36. url=url+"sid="+Math.random();
    37. xmlHttp.onreadystatechange=stateChangedProjektText;
    38. xmlHttp.open("POST",url,true);
    39. xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    40. xmlHttp.overrideMimeType('text/xml; charset=ISO-8859-1');
    41. xmlHttp.send('operation=contentText&projektId='+str);
    42. }
    43. function stateChangedProjektText()
    44. {
    45. if (xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3 )
    46. {
    47. document.getElementById("foot2").innerHTML='<div id="load"></div>';
    48. }
    49. if (xmlHttp.readyState==4)
    50. {
    51. document.getElementById("foot2").innerHTML=xmlHttp.responseText;
    52. }
    53. }
    Alles anzeigen


    Allerdings wir das erste von zweiten an die Wand gefahren und bleibt vor readystate 4 stecken und mit timeout von der zweite komm ich auch net gescheit weiter.


    Und wenn ichs mit nem time timeout mache:

    Quellcode

    1. <li class="auswahlDetailClick" onClick="showProjekt(<?php echo $row['projektId']; ?>);window.setTimeout('showProjektText(<?php echo $row['projektId']; ?>)',100); "></li>


    dann kommt der ie7 mit dem nicht klar

    Quellcode

    1. xmlHttp.overrideMimeType('text/xml; charset=ISO-8859-1');


    kann ich das Zeichensatz problem behebn in dem ich das request als xml ausgebe?
  • AJAX will UTF8 forcieren. Wenn der Webserver aber kein UTF8 liefert, gibt es Probleme.
    In meiner (und vielen anderen Standardkonfigurationen) läuft der Webserver in UTF8.

    Hier nochmal eine Info zum diesem Problem:
    http://de.wikipedia.org/wiki/AJaX#Probleme_durch_die_UTF-8-Zeichenkodierung

    Willst du Texte konverieren musst du auf Serversprachen zurückgreifen. Für PHP hieße die Funktion z.B. utf8_encode.

    Ansonsten kannst du wie gesagt auch mit Entities arbeiten. Dann hast du gar keine Probleme.