Responsetext von XMLHttpRequest ist undefined wenn ich ein parameter einer function übergebe

DerAskTyp

Mitglied
HTML:
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <meta charset="utf-8" />
   <title>Login Page</title>
   <script src="ClientLogic.js"></script>

</head>
<body onload="checkIfAlreadyLoggedIn(logginAndRegisterReqListener('MyLoginForm'))">

   <form id="myLoginForm" style="display:none" method="post" action='Login.html'>
       <input name="username" id="username" title="username" type="text" placeholder="name" />  <br />
       <input name="password" id="password" title="password" type="password" placeholder="password" /> <br/>
       <input type="submit" value="Submit">
   </form>

</body>
</html>

Javascript:
function checkIfAlreadyLoggedIn(myFunction) {
   makeGETCallWithSpecificURLAndMethod("/userLoggedIn", myFunction);
}


function logginAndRegisterReqListener() {

   if (this.responseText == "false") {
       for (i = 0; i < arguments.length; i++) {
           document.getElementById(arguments[i]).style.display = "block";
       }
   }
   else {
       console.log(this.responseText); //undefined wenn ich logginAndRegisterReqListener einen parameter übergebe. wenn ich aber nicht den parameter übergebe so bekomme ich true/false zurück .
       window.location = '/UserProfile.html';
   }
}



function makeGETCallWithSpecificURLAndMethod(url,specFun) {
   var oReq = new XMLHttpRequest();
   oReq.addEventListener("load", specFun);
   oReq.open("GET", url);
   oReq.send();
}

Also hier ist das Problem. WIe sie sehen können rufe ich in meiner HTML Seite eine Function auf die als Parameter eine andere function bekommt und diese Funktion hat einen String als Parameter. Das problem ist wenn ich der Funktion (die als parameter übergebe wird) einen Parameter übergebe so bekomme ich undefined zurück (bei console.log) wenn ich aber keinen Parameter übergebe dann bekomme ich das ergebnis was ich erwarte (true/false) doch dann habe ich das problem das ich auf meine tags nicht zugreifen kann weil ich halt keinen parameter habe.
 
Hi,

mit
Code:
checkIfAlreadyLoggedIn(logginAndRegisterReqListener('MyLoginForm'))
übergibst du deiner Funktion keine Funktion als Parameter. Stattdessen führst du die innere Funktion mit dem Parameter 'MyLoginForm' aus.

Übergebe die Funktion (callback) als Objekt und die IDs zum Beispiel als Array, das alle notwendigen IDs enthält. Diesen Parameter schleifst du durch die Funktionen durch, um ihn letztendlich zum Ende zu verwenden.
Der callback wird im load-Event des Requests das xhr-Object selbst mitgegeben, um später auf die responseText-Eigenschaft zugreifen zu können.

Beispiel:
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>www.tutorials.de (Quaese)</title>
<link rel="stylesheet" href="">
<script>
function checkIfAlreadyLoggedIn(myFunction, idArray) {
    makeGETCallWithSpecificURLAndMethod("/userLoggedIn", myFunction, idArray);
}

function logginAndRegisterReqListener(xhr, idArray) {
    if (xhr.responseText == "false") {
        for (i = 0; i<idArray.length; i++) {
            document.getElementById(idArray[i]).style.display = "block";
        }
    } else {
        window.location = '/UserProfile.html';
    }
}

function makeGETCallWithSpecificURLAndMethod(url, specFun, idArray) {
    var oReq = new XMLHttpRequest();
    oReq.addEventListener("load", function() {
        // execute function and hand over xhr request and id array
        specFun(this, idArray);
    });
    oReq.open("GET", url);
    oReq.send();
}
</script>
</head>
<body onload="checkIfAlreadyLoggedIn(logginAndRegisterReqListener, ['MyLoginForm', 'MyLoginForm2'])">
    <div id="MyLoginForm" style="display: none;">inhalt</div>
    <div id="MyLoginForm2" style="display: none;">inhalt2</div>
</body>
</html>
Ich hoffe, das hilft dir weiter.

Ciao
Quaese
 
Übergebe die Funktion (callback) als Objekt und die IDs zum Beispiel als Array, das alle notwendigen IDs enthält. Diesen Parameter schleifst du durch die Funktionen durch, um ihn letztendlich zum Ende zu verwenden.
Der callback wird im load-Event des Requests das xhr-Object selbst mitgegeben, um später auf die responseText-Eigenschaft zugreifen zu können.

Also ist es die einzige Möglichkeit sozusagen die IDs zu übergeben.? Weil ich wollte unbedingt das ich es vermeide noch einen parameter zu benutzen für eine Funktion die in eigentlich nicht brauch sondern die einzige die die IDs als Parameter braucht ist logginAndRegisterReqListener.

Das logginAndRegisterReqListener gleich aufgerufen wurde bemerkte ich auch als ich einmal in makeGETCallWithSpecificURLAndMethod die Funktion nicht aufgerufen habe und trotzdem undefined bekommen habe xD.

Aber falls das der einzige Weg ist das passt eh ja auch. Hauptsache es geht :D

Danke :)
 
Zurück