博客列表 >AJAX与FormData

AJAX与FormData

蔚蓝世纪
蔚蓝世纪原创
2020年05月22日 13:47:57729浏览

一、什么是AJAX

  1. AJAX = Asynchronous JavaScript And XML.
  2. AJAX 并不是编程语言。
  3. AJAX 是一种从网页访问 Web 服务器的技术。
  4. AJAX 代表异步 JavaScript XML

二、AJAX工作原理

三、AJAX的核心

Ajax 的核心是 XMLHttpRequest 对象。所有现代浏览器都支持 XMLHttpRequest 对象。

创建 XMLHttpRequest 的语法是:
  1. variable = new XMLHttpRequest();

四、AJAX实例

  1. //1.创建Ajax对象
  2. var xhr = new XMLHttpRequest();
  3. //2.监听请求状态的变化情况
  4. xhr.onreadystatechange = function () {
  5. if (xhr.readyState === 4 && xhr.status === 200) {
  6. console.log(xhr.responseText);
  7. }
  8. };
  9. //3.初始化请求参数
  10. // xhr.open("请求类型","请求URL",是否异步);
  11. xhr.open("POST", "test3.php", true);
  12. //4.设置请求头,模拟表单类型的数据进行发送,application/x-www-form-urlencoded默认值,要记住
  13. xhr.setRequestHeader("content-type", "application/json;charset=utf-8");
  14. var user = {
  15. emial: "admin@php.cn",
  16. password: "123456",
  17. };
  18. // 将js对象转为json
  19. var data = JSON.stringify(user);
  20. //4.发送请求
  21. xhr.send(data);
输出效果:

上例可以有另一种更简洁优雅的写法
  1. //FormData
  2. //可以直接序列化表单数据
  3. //可直接被Ajax识别,所以可以不设置请求头
  4. //除了表单数据外,也可用于普通数据
  5. //1.创建Ajax对象
  6. var xhr = new XMLHttpRequest();
  7. //2.监听请求状态的变化情况
  8. xhr.onreadystatechange = function () {
  9. if (xhr.readyState === 4 && xhr.status === 200) {
  10. console.log(xhr.responseText);
  11. }
  12. };
  13. //3.初始化请求参数
  14. // xhr.open("请求类型","请求URL",是否异步);
  15. xhr.open("POST", "test4.php", true);
  16. //FormData
  17. var data = new FormData();
  18. data.append("username", "admin");
  19. data.append("password", "admin888");
  20. //4.发送请求
  21. xhr.send(data);

六、使用FormData制作一个响应表单

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Ajax-POST-FormData</title>
  7. </head>
  8. <body>
  9. <p>请登录</p>
  10. <!-- onsubmit="return false": 禁用表单的默认提交,改为自定义的Ajax提交 -->
  11. <form
  12. action=""
  13. method="POST"
  14. style="display: grid; gap: 15px;"
  15. onsubmit="return false"
  16. >
  17. <input
  18. type="email"
  19. name="email"
  20. placeholder="exam@email.com"
  21. required
  22. autofocus
  23. />
  24. <input type="password" name="password" placeholder="******" required />
  25. <button>提交</button>
  26. </form>
  27. <script>
  28. // 1. 获取表单和按钮
  29. var form = document.querySelector("form");
  30. var btn = document.querySelector("form button");
  31. // 2. 给按钮绑定点击事件,进行Ajax请求
  32. btn.onclick = function () {
  33. // 1. 创建Ajax对象
  34. var xhr = new XMLHttpRequest();
  35. // 2. 监听请求
  36. xhr.onreadystatechange = function () {
  37. if (xhr.readyState === 4 && xhr.status === 200) {
  38. console.log(xhr.responseText);
  39. // 将jsonl转js对象
  40. var res = JSON.parse(xhr.responseText);
  41. console.log(res);
  42. switch (res.status) {
  43. case 0:
  44. case 1:
  45. error = res.message;
  46. break;
  47. default:
  48. error = "未知错误";
  49. }
  50. // 将提示显示到表单中
  51. var span = document.createElement("span");
  52. span.innerHTML = error;
  53. span.style.color = "red";
  54. form.appendChild(span);
  55. }
  56. };
  57. // 3. 初始化请求参数
  58. xhr.open("POST", "test4.php", true);
  59. // FormData
  60. var data = new FormData(form);
  61. data.append("login_time", new Date().getTime());
  62. // 5. 发送请求
  63. xhr.send(data);
  64. };
  65. // 清除提示信息
  66. var inputs = document.querySelectorAll("input");
  67. for (var i = 0; i < inputs.length; i++) {
  68. inputs[i].oninput = function () {
  69. if (btn.nextElementSibling !== null)
  70. form.removeChild(btn.nextElementSibling);
  71. };
  72. }
  73. </script>
  74. </body>
  75. </html>
输出效果:


七、总结

1.向服务器发送请求时用GET 比 POST 更简单响应速度更快,可用于大多数情况下。但是,如果遇到以下情况要始终使用 POST:缓存文件不是选项时(更新服务器上的文件或数据库);向服务器发送大量数据时(POST 无大小限制);发送用户输入时(可包含未知字符),POST 比 GET 更强大更安全。
2.通过异步发送,JavaScript 不必等待服务器响应,而是可以:在等待服务器响应时执行其他脚本或者当响应就绪时处理响应。解决了在服务器上执行许多任务时非常耗时,且因此操作可能会导致应用程序挂起或停止的问题。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议