简体   繁体   English

提交后页面正在重新加载

[英]Page is reloading after submitting

I'm trying to retrieve data from my form, process it using Node.js get method and place a response on a webpage. 我正在尝试从表单中检索数据,使用Node.js的get方法对其进行处理,然后将响应放置在网页上。 It all works well except one thing: the page is reloaded at the very end so the received data doesn't stay there for long. 除一件事情外,其他所有功能都运作良好:页面在最后被重新加载,因此接收到的数据不会在那里停留很长时间。

What am I doing wrong? 我究竟做错了什么?

script.js: script.js:

;!function() {
  'use strict';

  const form = document.forms['user'];
  form.elements['submit'].addEventListener('click', () => {
    let xhr = new XMLHttpRequest();

    let onload = () => {
      document.querySelector('#result').innerHTML = xhr.responseText;
      xhr.removeEventListener('load', onload);
    };

    xhr.addEventListener('load', onload);

    xhr.open('GET', '/firstName');
    xhr.send(form.elements['firstName']);
  });

}();

app.js: app.js:

var express = require('express');
var mysql = require('mysql');

var app = express();
app.use(express.static('public'));


var connection = mysql.createConnection({
  host: 'localhost',
  port: '8889',
  user: 'root',
  password: 'root',
  database: 'user'
});

connection.connect(err => {
  if (err) {
    console.log(err);
  } else {
    console.log('connected');
  }
});

app.get('/firstName', (req, res) => {
  connection.query('SELECT * FROM user', (err, rows, fields) => {
    if (err) {
      console.log(err);
    } else {
      console.log("SUCCESS");
      res.send(rows);
    }
  });
});

app.listen(3000);

Default browser behaviour on form submit. 表单提交时的默认浏览器行为。 You need to prevent it from happening. 您需要防止它发生。

form.elements['submit'].addEventListener('click', (ev) => {
  ev.preventDefault()

Update proposed by @Ondra Koupil @Ondra Koupil提出的更新

Better solution would be to bind on submit event. 更好的解决方案是将绑定submit事件。 This would also handle form submition initiated via keyboard ( ctrl + enter ) 这也将处理通过键盘启动的表单提交( ctrl + enter

form.addEventListener('submit', (ev) => {
  ev.preventDefault()
  // ... rest of your code

By using the <button> element to submit the form, the page is forced to reload. 通过使用<button>元素提交表单,页面将被强制重新加载。

Instead of <button> you should use <a href='javascript:;'> 您应该使用<a href='javascript:;'>代替<button>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM