【问题标题】:form submit vs separate XMLHttpRequest表单提交与单独的 XMLHttpRequest
【发布时间】:2015-03-13 01:17:14
【问题描述】:

我正在使用 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>

Node.js 不能为一个请求发送两个响应。

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

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

看了很多有名的网站,html代码确实实现了我朋友描述的,他想通过标准程序做网站。他认为我通过 onclick 触发器处理请求的方式是一种解决方法。我明白了,我对web开发不熟悉,我负责服务器。但这不是使工作量 x2 吗?我的意思是,如果客户端一旦获得数据就可以处理发布操作,那不是一种解决方法,而是一种处理请求的正常方式吗?

【问题讨论】:

    标签: javascript html node.js forms


    【解决方案1】:

    Node.js 不能为一个请求发送两个响应

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

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

    要么是那个,要么是表单的submit 事件。它用途广泛,几乎所有浏览器都支持它。

    【讨论】:

    • 但是我的方法后来会使网站效率低下或不安全吗?提交事件无法处理发布操作;它只向服务器发送数据,并会获得重定向。他将不得不以一种或另一种方式获取成员数据。
    • 您可以使用提交事件处理 POST AJAX。你真的可以在提交事件处理程序中做任何事情。它不会比客户端和服务器之间的任何交互更安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多