美文网首页
XMLHttpRequest用法

XMLHttpRequest用法

作者: 夏liao夏天 | 来源:发表于2018-10-05 08:20 被阅读0次

    在做登录注册时,由于想让前端和后端进行数据的交互,比如登录成功或失败,前端都弹出相应的提示窗口。可以用AJAX来实现,但是我想尝试一下使用JS自带的XMLHttpRequest。
    使用XMLHttpRequest (XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新。这使得Web页面可以只更新页面的局部,而不影响用户的操作。

    前端页面index.html

        <form  id="login" name="login">
          <label for="Username">Username:</label>
          <input type="text"  id="username" name="username" placeholder="Username" />
          <label for="Password">Password:</label>
          <input type="password" id="password" name="password" placeholder="Password" />
          <button type="button" id="signUp">Sign Up</button>
          <button type="button" id="signIn">Sign In</button>
        </form>
    

    前端login.js中的sign_in函数部分

        // sign in
        function sign_in(){
            var XHR = new XMLHttpRequest();
            var FD = new FormData();
            var username = document.getElementById('username').value;
            var password = document.getElementById('password').value;
            password = md5(password);
            FD.append('username', username);
            FD.append('password', password);
    
            XHR.addEventListener('error', function(){
                alert("fail, please login again");
            });
            XHR.onreadystatechange = function() {
                if(XHR.readyState == 4){
                    if((XHR.status >= 200 && XHR.status < 300) || XHR.status == 304){
                        hide();
                        login_success(username);
                        alert(XHR.responseText);
                    }else{
                        alert("It failed");
                    }
                }
            }
            if(username != null && password != null){
                XHR.open("POST", '/api/signin');
                XHR.send(FD);
            }
            else{
                alert("Sorry, username and password cannot be empty!");
            }
        }
        // submit the form for sign in or sign up
        var signUp = document.getElementById('signUp');
        var signIn = document.getElementById('signIn')
        signUp.addEventListener('click', function(){
            sign_up();
        });
        signIn.addEventListener('click', function(){
            sign_in();
        })
    });
    

    由于要传递表单数据,因此把数据以FormData的格式存储和传递。注意FormData只能写不能读,所以在js中利用append给FormData写入数据后,不要尝试通过console.log读取FormData中的数据。FormData在传递到服务器端时是放在request的payload中,而不是body中,因此服务器端也需要引入相应的包才能读取FormData数据。

    服务器端app.js 的signin路由部分

    const multipart = require('connect-multiparty');
    var multipartMiddleware= multipart();
    
    router.post('/signin',multipartMiddleware, (req, res) => {
      console.log(req.body);
      var username = req.body.username;
      var password = req.body.password;
      let flag = false;
      users.forEach(user => {
        if(username === user.username){
          if(password == user.password){
            flag = 1;
            return;
          }
        }
      });
      if(flag == true){
        res.send('login success');
      }
      else{
        res.end('login fail,please check the username or password!')
      }
      return res.status(200);
    });
    

    相关文章

      网友评论

          本文标题:XMLHttpRequest用法

          本文链接:https://www.haomeiwen.com/subject/knyfaftx.html