2017-02-15 5 views
0

Что я хочу, очень просто: у меня есть сервер javascript и HTML-клиент, и я просто хочу получить строку с сервера, которую HTML-страница затем добавляет в одно из раскрывающихся меню. Существует три соответствующих блока кода:XMLHttpRequest no response

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); 
    } 

Эти два находятся в тегах сценария в клиенте. Соответствующий код в моем сервере заключается в следующем:

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"); 
} 

Я знаю loaderCaller() добавит опцию, если я изложу stringLoader возвращать строку буквальной вместо переменного, так что проблема не в этом. Я также знаю, что if {} на сервере выполняется, потому что я поставил несколько вызовов console.log() для его проверки.

Это должно добавить опцию меню выбора, которое просто говорит «тест», правильно? Я предполагаю, что это одна из тех проблем, где ответ ослепительно очевиден. Пожалуйста, помогите мне. Этот код был нефункциональным в течение многих часов, и я очень хочу умереть.

ответ

0

data возвращается до завершения запроса xhr. Вы можете обойти это, вернув его функции обратного вызова.

function stringLoader(callback){ 
    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; 
      callback(data); 
     } 
    } 
    }; 
    xhr.send(); 
} 

function loaderCaller(){ 
    var element = document.getElementById("Menu"); 
    var option = document.createElement("option"); 
    stringLoader(function(data) { 
     option.text = data; 
     element.add(option); 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^