簡體   English   中英

表單提交與單獨的XMLHttpRequest

[英]form submit vs separate XMLHttpRequest

我正在使用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實例並從表單中收集信息並將其發送到服務器,獲取響應並從那里進行進一步操作(進行注冊)或主頁)。

我的朋友該怎么做,使它成為具有針對登錄URL的action屬性的普通FORM-SUBMIT類型,並且由於我只能發送一個響應,因此我將發送重定向並控制路由處理。 但是隨后,由於客戶端將沒有其他成員數據,就像之前他將通過單獨的路由發送另一個請求以獲取已登錄成員的數據(例如會話和成員的密鑰)一樣。

當我查看許多著名的網站時,html代碼確實實現了我朋友所描述的內容,並且他希望通過標准程序來創建該網站。 他認為我通過onclick觸發器處理請求的方式是一種解決方法。 我明白了,但我對Web開發不熟悉,我負責服務器。 但這不是使工作量增加2倍嗎? 我的意思是,如果客戶端一旦獲得數據就可以處理后期操作,那不是不是一種解決方法,而是一種處理請求的常規方法嗎?

Node.js無法為一個請求發送兩個響應

我不認為任何Web服務器都可以做到這一點,除非您使用的是雙工連接,例如websocket。

他認為我通過onclick觸發器處理請求的方式是一種解決方法。

要么是表單的submit事件。 它非常通用,幾乎所有瀏覽器都支持它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM