未定义的响应进入javascript函数ejs

时间:2018-04-17 09:57:12

标签: javascript node.js ejs

我试图获取任何地址的状态,其中调用了request_withd函数,然后动作继续执行另一个名为'is_address_exist'的函数,该函数是任何地址的返回响应状态。 '是'或'不',但我在控制台中收到'未定义'的响应消息。

function is_address_exist(address) {
  var xmlhttp = new XMLHttpRequest();
  var url = '../ withdrawn/address_check/' + address;
  xmlhttp.open('GET', url, true);
  xmlhttp.send();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState === 4) {
      if (xmlhttp.status === 200) {
        return xmlhttp.responseText;
      }
    }
  }
}

function request_withd(e) {
  var response_status = is_address_exist(address);
  console.log(response_status);
}

2 个答案:

答案 0 :(得分:1)

onreadystatechange函数是一个回调函数,它运行异步,它应该在其定义中包含预期的操作。这应该有用。

function is_address_exist(address){
        var xmlhttp=new XMLHttpRequest();
        var url='../withdrawn/address_check/'+address;
        xmlhttp.open('GET',url,true);
        xmlhttp.send();
         xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState===4)
            {
             if(xmlhttp.status===200){
                  console.log(xmlhttp.responseText);
                }
              }
            }   
          }
   function request_withd(e){
   is_address_exist(address);
 }

或非非同步功能

function is_address_exist(address) {
  var responseText ="";
  var xmlhttp = new XMLHttpRequest();
  var url = '../ withdrawn/address_check/' + address;
  xmlhttp.open('GET', url, false);
  xmlhttp.send();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState === 4) {
      if (xmlhttp.status === 200) {
        responseText = xmlhttp.responseText;
      }
    }
  }
  return responseText;
}

function request_withd(e) {
  var response_status = is_address_exist(address);
  console.log(response_status);
}

答案 1 :(得分:0)

is_address_exist()此处不返回任何内容。 您的return发生在xmlhttp.onreadystatechange = () => ...

您可以在这里使用callbackspromises

回调示例:

function is_address_exist(address, handler){
    //...
    xmlhttp.onreadystatechange = function(){
       //...
       handler(xmlhttp.responseText);
    });
}

is_address_exist('...', function(data){
    console.log(data);
});

承诺示例:

function is_address_exist(){
    return new Promise(function (resolve, reject) {
        //...
        xmlhttp.onreadystatechange = function(){
           //...
           resolve(xmlhttp.responseText);
        });
        xmlhttp.onerror = reject;
    });
}

is_address_exist()
    .then(function (data) {
        console.log(data)
    })
    .catch(console.error.bind(console));