详细介绍:登录功能与form-serialize插件应用示例

目录

项目背景与目的

完整源码:(index.html)

代码分析

1. HTML 部分 (index.html)

2. JavaScript 部分 (script 标签中的代码)

3. form-serialize 插件(form-serialize.js)

结论


项目背景与目的

本案例展示了如何通过HTML、CSS、JavaScript结合Bootstrap框架和axios库实现一个简单的登录功能。用户输入用户名和密码,点击登录按钮后,表单数据将通过AJAX请求提交给后台服务器。服务器响应后,系统会显示相应的提示信息。通过此案例,你可以学习到如何使用表单序列化插件form-serialize来提取表单数据,并通过AJAX进行表单提交,展示如何处理后台返回的结果。

你可以根据自己的需求进一步修改代码,实现更多功能。

完整源码:(index.html form-serialize.js)

index.html

代码分析

1. HTML 部分 (index.html)

这是页面的主体结构部分,包含了表单和提示框。





  
  
  
  14.案例_登录_插件使用
  
  
  
  
  
  
  
  



  

欢迎-登录

  • 引入Bootstrap:该页面使用Bootstrap框架进行页面样式设计,标签引入了Bootstrap的CSS样式文件。
  • 页面结构:包含一个登录表单,用户输入用户名和密码后,点击“登录”按钮进行提交。表单提交的结果通过提示框
    显示出来。
  • 表单:表单有两个输入框,一个用于用户名,一个用于密码。

form-serialize.js

// get successful control from form and assemble into object
// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2

// types which indicate a submit action and are not successful controls
// these will be ignored
var k_r_submitter = /^(?:submit|button|image|reset|file)$/i;

// node names which could be successful controls
var k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;

// Matches bracket notation.
var brackets = /(\[[^\[\]]*\])/g;

// serializes form fields
// @param form MUST be an HTMLForm element
// @param options is an optional argument to configure the serialization. Default output
// with no options specified is a url encoded string
//    - hash: [true | false] Configure the output type. If true, the output will
//    be a js object.
//    - serializer: [function] Optional serializer function to override the default one.
//    The function takes 3 arguments (result, key, value) and should return new result
//    hash and url encoded str serializers are provided with this module
//    - disabled: [true | false]. If true serialize disabled fields.
//    - empty: [true | false]. If true serialize empty fields
function serialize(form, options) {
    if (typeof options != 'object') {
        options = { hash: !!options };
    }
    else if (options.hash === undefined) {
        options.hash = true;
    }

    var result = (options.hash) ? {} : '';
    var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);

    var elements = form && form.elements ? form.elements : [];

    //Object store each radio and set if it's empty or not
    var radio_store = Object.create(null);

    for (var i=0 ; i {
    myAlert.classList.remove('show');
    myAlert.classList.remove(bgStyle);
  }, 2000);
}

// 使用form-serialize插件获取表单数据
document.querySelector('.btn-login').addEventListener('click', () => {
  const form = document.querySelector('.login-form');
  const data = serialize(form, {dash: true, empty: true});
  const { username, password } = data;

  console.log(username, password);

  // 验证用户名和密码
  if (username.length < 8) {
    alertFn('用户名必须大于等于8位', false);
    return;
  }
  if (password.length < 6) {
    alertFn('密码必须大于等于6位', false);
    return;
  }

  // 发送AJAX请求
  axios({
    url: 'http://hmajax.itheima.net/api/login',
    method: 'POST',
    data: { username, password }
  }).then(result => {
    alertFn(result.data.message, true);
  }).catch(error => {
    alertFn(error.response.data.message, false);
  });
});
  • 表单数据序列化serialize(form)函数将表单的数据转换为一个对象。这是通过form-serialize.js库实现的,便于收集表单中的所有字段。
  • 用户输入验证:验证用户名和密码的长度是否满足要求。如果不符合条件,则会显示错误信息,并阻止提交。
  • AJAX 请求:使用axios发送一个POST请求到登录API。根据请求的结果,调用alertFn函数显示成功或失败的提示框。
3. form-serialize 插件(form-serialize.js)

form-serialize.js是一个用来将表单数据序列化成对象或URL编码的插件。以下是serialize函数的实现:

// 序列化表单数据
function serialize(form, options) {
  if (typeof options != 'object') {
    options = { hash: !!options };
  } else if (options.hash === undefined) {
    options.hash = true;
  }

  var result = (options.hash) ? {} : '';
  var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);
  var elements = form && form.elements ? form.elements : [];
  var radio_store = Object.create(null);

  for (var i = 0; i < elements.length; ++i) {
    var element = elements[i];
    if ((!options.disabled && element.disabled) || !element.name) continue;
    if (!k_r_success_contrls.test(element.nodeName) || k_r_submitter.test(element.type)) continue;

    var key = element.name;
    var val = element.value;

    // 处理复选框和单选框
    if ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) {
      val = undefined;
    }

    // 如果为空则跳过
    if (!val) continue;

    result = serializer(result, key, val);
  }

  return result;
}

此函数将HTML表单中的数据按键值对的形式序列化,可以选择是否包括空字段、禁用字段等。它返回一个对象或URL编码字符串,方便后续进行AJAX请求。

结论

通过这个项目,你可以学到如何结合HTML表单、Bootstrap样式、JavaScript和AJAX来实现一个完整的登录系统。重点是:

  • 如何使用form-serialize插件处理表单数据。
  • 如何使用axios发送AJAX请求,并处理响应结果。
  • 如何通过JavaScript控制UI效果(如提示框显示/隐藏)。

你可能感兴趣的:(ajax,前端,javascript,bootstrap,html5,vscode,css3)