首页 > 解决方案 > 为什么我的 responseText 不能在 if 条件下工作(在其他地方工作)?

问题描述

下面是我的 html 文件中的 Javascript。我正在使用 API 制作一个简单的登录功能。API 发布请求返回“登录通过”或“登录失败”。

myFunction3() 中的 Window.alert(datas),它返回“登录通过”正在返回“登录通过”,但是 if 条件中没有任何效果。

<script type="text/javascript">



  function myFunction2(){
    //grab user entered values for posting to API
    uid=document.getElementById('username').value;
    pass=document.getElementById('password').value;

    //Generate url for Post request
    var url='http://127.0.0.1:5000//login/'+uid+'/'+pass
    
   
   //making Post request to API
   const xhr = new XMLHttpRequest();  
   xhr.open("POST", url);  
   xhr.send(); 

  
    xhr.onreadystatechange=function(){
      if(xhr.readyState==4&&xhr.status==200){
        if(xhr.responseText){
           const data = xhr.responseText; //json returned by post request
            myFunction3(data); 
           
        }
      }
    }
  }

  function myFunction3(datas){
        window.alert(datas);
         
        if(datas == "login passed"){
          
          localStorage.setItem("user",uid);
          console.log(localStorage.getItem("user"));
          window.alert(localStorage.getItem("user"));
        }
        
  }


</script>

标签: javascripthtml

解决方案


这个问题是范围问题:

function myFunction2(){
    //grab user entered values for posting to API
    uid=document.getElementById('username').value;
    pass=document.getElementById('password').value;

    //Generate url for Post request
    var url='http://127.0.0.1:5000//login/'+uid+'/'+pass
    
   
   //making Post request to API
   const xhr = new XMLHttpRequest();  
   xhr.open("POST", url);  
   xhr.send(); 

  
    xhr.onreadystatechange=function(){
      if(xhr.readyState==4&&xhr.status==200){
        if(xhr.responseText){
           const data = xhr.responseText; //json returned by post request
            myFunction3(data); 
           
        }
      }
    }
 
    // this function needs to be in scope so uid is valid
    function myFunction3(datas){
        window.alert(datas);
         
        if(datas == "login passed"){
          
          localStorage.setItem("user",uid);
          console.log(localStorage.getItem("user"));
          window.alert(localStorage.getItem("user"));
        }
        
  }

  }

尝试将您的函数 myFunction3 移动到 myFunction2 中。您的 if 语句正在工作,问题是 uid 将不等于任何内容,因为它在全局范围内不存在。

您还可以通过在代码顶部的 myFunction2 之外的全局范围内声明 uid 来解决此问题。

var uid="unauthorized";

推荐阅读