Javascript 表单提交与单独的XMLHttpRequest

Javascript 表单提交与单独的XMLHttpRequest,javascript,html,node.js,forms,Javascript,Html,Node.js,Forms,我正在使用Node.js,并将express作为我的主框架 我有一个带有以下代码的登录网页 <script> function sendResponse(){ var data = new FormData(); var login = document.getElementById("login").value; var password = document.getElementById("password").value; data.ap

我正在使用Node.js,并将express作为我的主框架

我有一个带有以下代码的登录网页

  <script>
  function sendResponse(){
    var data = new FormData();
    var login = document.getElementById("login").value;
    var password = document.getElementById("password").value;
    data.append('login', login);
    data.append('password', password);

    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://myURL/login', true);
    xhr.onload = function () {
      // do something to response
      var result = JSON.parse(this.responseText);
      if(result["result"] == "fail"){
        alert("No Account Found. Please Register First.");
        window.location.replace("http://myURL/register");
      }
      else{
        window.location.replace("http://myURL/mainpage");
      }
    };
    xhr.send(data);
  }
  </script>

  <h1>Login Portal</h1>
  <hr />
  <form method="post">
        <table>
               <tr>
                   <td><label>Username or Email:</label></td>
                   <td><input id="login" type="text" name="login" /></td>
               </tr>
               <tr>
                   <td><label>Password:</label></td>
                   <td><input id="password" type="password" name="password" /></td>
               </tr>
        </table>
    <button type="button" onclick="sendResponse()">Login</button>
    </form>

函数sendResponse(){
var data=new FormData();
var login=document.getElementById(“login”).value;
var password=document.getElementById(“密码”).value;
data.append('login',login);
data.append('password',password);
var xhr=new XMLHttpRequest();
xhr.open('POST','http://myURL/login",对),;
xhr.onload=函数(){
//做些反应
var result=JSON.parse(this.responseText);
如果(结果[“结果”]=“失败”){
警报(“未找到帐户。请先注册”);
window.location.replace(“http://myURL/register");
}
否则{
window.location.replace(“http://myURL/mainpage");
}
};
发送(数据);
}
寻找登录页面

用户名或电子邮件: 密码: 登录
Node.js无法为一个请求发送两个响应

html不是通过普通的FORM-SUBMIT请求发送的,而是有一个单独的javascript函数,该函数创建一个新的httprequest实例,从表单收集信息并将其发送到服务器,获取响应并从那里执行进一步的操作(注册或主页)

我的朋友要做的是使其成为一个普通的表单提交类型,并将action属性指向登录url,因为我只能发送一个响应,所以我将发送重定向并控制路由处理。但是,由于客户端不会像以前那样拥有其他成员数据,因此他会通过单独的路由发送另一个请求,以获取登录成员的数据,例如会话和成员密钥

当我查看许多著名的网站时,html代码确实实现了我朋友描述的内容,他希望通过标准程序创建网站。他认为我通过onclick触发器处理请求的方法是一种变通方法。我明白了,我不熟悉网络开发,我负责服务器。但这不就是工作量吗?我的意思是,如果客户端能够在获得数据后处理post操作,这不是一种解决方法,而是一种处理请求的正常方式吗

Node.js无法为一个请求发送两个响应

我不认为任何web服务器都能做到这一点,除非您使用双工连接,比如websocket

他认为我通过onclick触发器处理请求的方法是一种变通方法


要么是那样,要么就是形式上的事件。它的功能非常广泛,几乎所有的浏览器都支持它。

但是我的方法是否会导致网站效率低下或安全性降低?提交事件无法处理post操作;它只向服务器发送数据,并将获得重定向。他必须以这样或那样的方式获取成员数据。你可以通过提交事件处理帖子。您确实可以在submit事件处理程序中执行任何操作。它不会使它的安全性低于客户端和服务器之间的任何交互。