Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用XMLhttprequest从函数返回值_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 使用XMLhttprequest从函数返回值

Javascript 使用XMLhttprequest从函数返回值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我对JS非常陌生,尝试创建简单的页面,该页面将执行以下操作: 获取某个服务器的IP地址 然后将get请求发送到此服务器 解析获取响应 将筛选的行添加到html页面上的表中 我可以通过浏览器控制台执行所有步骤,但由于某些原因,使用get函数移动到JS文件时,函数不会返回值 在下面的代码中,第6行将在控制台中打印undefined。 知道如何从函数getStatus返回“status”吗? 第5行和第6行之间是否应该有一些超时 谢谢 $("input[type='text']").keypress(

我对JS非常陌生,尝试创建简单的页面,该页面将执行以下操作:

  • 获取某个服务器的IP地址
  • 然后将get请求发送到此服务器
  • 解析获取响应
  • 将筛选的行添加到html页面上的表中
  • 我可以通过浏览器控制台执行所有步骤,但由于某些原因,使用get函数移动到JS文件时,函数不会返回值

    在下面的代码中,第6行将在控制台中打印undefined。 知道如何从函数getStatus返回“status”吗? 第5行和第6行之间是否应该有一些超时

    谢谢

    $("input[type='text']").keypress(function(event){
       if(event.which === 13){
        var address = $(this).val();
        var urlStat = 'http://'+address+':666/bla?open=stats';
        var status = getStatus(urlStat);
        console.log(status);
    
        $("input[type='text']").val('');
        $('table').append("<tr><th>"+address+"</th><th><ul></ul></th><th></th></tr>");
    }
    });
    
    function getStatus(url){
    var xhr = new XMLHttpRequest;
    
    xhr.open("GET", url);
    xhr.send();
    xhr.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
    
        var regexStatus = /(\w+ state:.*?)</g
        var response = xhr.responseText;
        var statuses = response.match(regexStatus);
        console.log('Inside function getStatus'+statuses);
        return statuses;
        };
    }
    };
    
    $(“输入[type='text'])。按键(函数(事件){
    if(event.which==13){
    var address=$(this.val();
    var urlStat='http://'+address+':666/bla?open=stats';
    var status=getStatus(urlStat);
    控制台日志(状态);
    $(“输入[type='text']”)val(“”);
    $('table')。追加(“+address+”
      ”; } }); 函数getStatus(url){ var xhr=新的XMLHttpRequest; xhr.open(“GET”,url); xhr.send(); xhr.onreadystatechange=函数(){ if(this.readyState==4&&this.status==200){
      var regexStatus=/(\w+state:.*)代码的问题是在发送请求后返回状态。这会产生一个小延迟。因为您立即请求返回值
      getStatus
      ,因此将得到
      未定义的
      。
      您可以使用回调函数解决此问题:

      function getStatus(url,callback){
          var xhr = new XMLHttpRequest;
      
          xhr.open("GET", url);
          xhr.send();
          xhr.onreadystatechange = function() {
              if (this.readyState == 4 && this.status == 200) {
      
                  var regexStatus = /(\w+ state:.*?)</g
                  var response = xhr.responseText;
                  var statuses = response.match(regexStatus);
                  console.log('Inside function getStatus'+statuses);
                  if(callback) callback(statuses);
            };
         }
      };
      
      编辑

      <> P>一个更好的解释和更长的解释,考虑检查< /P>可能的副本。
      getStatus(url,function(statuses){
          console.log(statuses);
      });