2017-02-15 5 views
0

Was ich will ist wirklich einfach: Ich habe einen Javascript-Server und einen HTML-Client, und ich möchte nur eine Zeichenfolge vom Server, die die HTML-Seite dann zu einem der Dropdown-Menüs hinzugefügt. Es gibt drei relevante Codeblöcke:XMLHttpRequest keine Antwort

function stringLoader(){ 
    var xhr = new XMLHttpRequest(); 
    var url = "/pathname"; 

    xhr.open("GET",url); 

    xhr.setRequestHeader("Content-Type", "text/xml"); 

    xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
     if (xhr.status == 200) { 
     var data = xhr.responseText; 
     } 
    } 
    }; 
    xhr.send(); 

    return data; 
    } 

function loaderCaller(){ 
    var element = document.getElementById("Menu"); 
    //"Menu" is the html <select> box I want to add to 
    var option = document.createElement("option"); 
    option.text = stringLoader(); 
    element.add(option); 
    } 

Diese beiden sind in Skript-Tags im Client. Der entsprechende Code in meinem Server ist dies:

function handleRequest(req, res) { 
//process the request 
console.log("Request for: "+req.url); 
var filename = ROOT + req.url; 
var urlObj = url.parse(req.url, true); 


var code = 200; 
var data = ""; 

if(req.method === 'GET' && urlObj.pathname === ("/pathname")){ 
    res.writeHead(code, {'content-type': 'text/html'}); 
    res.send("test"); 
} 

Ich weiß loaderCaller() die Option hinzufügen, wenn ich stringLoader setzen einen Stringliteral anstelle einer Variablen zurück, so ist das Problem nicht mit dem. Ich weiß auch, ob {} auf dem Server ausgeführt wird, weil ich mehrere console.log() -Aufrufe zum Testen verwendet habe.

Dies sollte eine Option zum Auswahlmenü hinzufügen, das nur "test" sagt, oder? Ich nehme an, das ist eines dieser Probleme, bei denen die Antwort offensichtlich ist. Bitte hilf mir. Dieser Code ist seit vielen Stunden nicht mehr funktionsfähig und ich möchte sehr gerne sterben.

Antwort

0

data wird zurückgegeben, bevor die xhr-Anforderung abgeschlossen ist. Sie können dies umgehen, indem Sie es an eine Rückruffunktion zurücksenden.