2015-03-13 5 views
0

Я работаю с Node.js и выражаю свою основную структуру.form submit vs separate XMLHttpRequest

У меня есть веб-страница входа в систему со следующим кодом.

<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 с действием, предназначенным для URL-адреса входа, и поскольку я могу только отправить один ответ, я бы послал перенаправление и взял управление маршрутом, обработки. Но тогда, поскольку у клиента не будет других данных-членов, например, прежде чем он отправит другой запрос через отдельный маршрут, чтобы получить данные зарегистрированного члена, такие как сеанс и ключ участника.

Когда я смотрю на многие известные веб-сайты, html-код реализует то, что мой друг описал, и он хочет сделать веб-сайт стандартными процедурами. Он считает, что мой способ обработки запросов с помощью триггера onclick является обходным путем. Я понял, и я не знаком с веб-разработкой, я отвечаю за сервер. Но не делает ли это нагрузкой x2? Я имею в виду, если клиентская сторона может обрабатывать действия после того, как она получает данные, разве это не обходной путь, а обычный способ обработки запросов?

ответ

0

Node.js не может отправить два ответа на один запрос

Я не думаю, что любой веб-сервер может сделать это, если вы не используете дуплексную связь, подобно WebSocket.

Он считает, что мой способ обработки запросов с помощью триггера onclick является обходным путем.

Либо это, либо submit событие формы. Он очень универсален и поддерживается практически любым браузером.

+0

но мой метод позже делает сайт неэффективным или менее безопасным? событие submit не может обрабатывать post action; он только отправляет данные на сервер и получает перенаправление. Ему нужно будет получить данные о членах так или иначе. – user3467433

+0

Вы можете обрабатывать POST-файлы AJAX с отправкой событий. Вы действительно можете что-либо сделать в обработчике событий отправки. Это не сделает его менее безопасным, чем любое взаимодействие между клиентом и сервером. – lxe