Ajax.onReadyStateChange Handler problem

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

  • Ajax.onReadyStateChange Handler problem

    First things First,
    <an alle>HI!!!</an alle>
    Ein nettes Forum is das und ich hoffe wir werden uns gegenseitig helfen können

    Also leider ist mein erster Post ein kleines Problem
    Ich schreibe einen (lerne Ajax) ... Text Editor (nicht WYSIWYG) und die folgende funktion
    funktioniert solange ich den alert befehl am anfang ausführen lasse
    am sonsten kommt es immer zu alert : "File open Error!"

    Quellcode

    1. function handleFileOpen() {
    2. //alert(getRequest.readyState);
    3. if(getRequest.readyState == 4 || getRequest.readyState == 0) {
    4. reqValue = getRequest.responseText;
    5. }else{
    6. alert("File open Error!");
    7. }
    8. }


    Vielen Dank für eure Zeit!! xD
  • Ok sorry xD

    Also der Alert in der funktion zeigt nur eine 1 an

    wird in dieser funktion nur aufgerufen die durch einen HTML button ausgeführt wird

    Quellcode

    1. function loadFile() {
    2. var file = prompt("File path");
    3. getRequest.open("GET", 'editor.php?load=' + file, true);
    4. getRequest.send(null);
    5. getRequest.onReadystatechange = handleFileOpen();
    6. create_document(file, reqValue);
    7. }


    nochmals sorry
  • Ja natürlich

    getRequest wird sofort nach der unteren fuktion als eine globale variable erstellt

    Quellcode

    1. function AjaxObject() {
    2. // if XMLHttpRequest is true
    3. if(window.XMLHttpRequest) {
    4. // return XMLHttpRequest Object
    5. return new XMLHttpRequest();
    6. // if ActiveXObject is true
    7. }else if(window.ActiveXObject) {
    8. // return ActiveX Object
    9. return new ActiveXObject("Microsoft.XMLHTTP");
    10. }else{
    11. // output errror
    12. alert("Obj creation Failed!!!");
    13. }
    14. // end function
    15. return false;
    16. }
    17. var getRequest = AjaxObject();
    Alles anzeigen
  • Quellcode

    1. getRequest.send(null);
    2. getRequest.onReadystatechange = handleFileOpen();


    Nur als kleiner Hinweis, du solltest erst defineiren, was bei einem Statechange aufgerufen wird und erst danach die Aktion ausführen.

    Dein Problem ist aber ein anderes: Immer wenn das getRequest-Objekt den Status änder wird deine Funktion aufgerufen. Das Problem ist nun aber, dass es auch noch Zustände zwischen 4 gibt. Ich kann jetzt leider keinen Übersicht mit den Zuständen finden. Aber ich nehme an, dass die Funktion aufgerufen wird, währen das Objekt noch nicht den Zustand 4 oder 0 hat. So wenn du jetzt deinen alert-Befehl aufrufst hast du eine gewisse Zeitspanne bis du auf Ok gedrückt hast. In der Zeit hat sich das readyState-Attribute aber schon wieder verändert und den request erfolgreich ausgeführt.

    Von daher kannst du nicht gleich darus schließen, wenn das readySate-Attribute beim Aufruf nicht gleich 4 oder 0 ist gleich deine Fehlermeldung aufzurufen. Musst mal nachgucken, welche Werte readyState annehmen kann. Und dann überprüfen "wenn erfolgreich dann" und "wenn nicht erfolgreich dann" und nicht "wenn erfolgreich dann" und "wenn was anders als erfolgreich dann"