jQuery AJAX 方法

前面已学过 load、$.get、$.post 三个快捷方法。这一篇作为 AJAX 方法的完整手册,补充 getJSON/getScript、全能方法 $.ajax()、全局事件以及表单序列化工具。

快捷请求方法

方法作用
load()请求 HTML 并插入元素
$.get() / $.post()GET / POST 请求
$.getJSON()请求并自动解析 JSON
$.getScript()加载并执行外部 JS
$.getJSON("data.json", function (json) {
  console.log(json.name); // 输出:data.json 中的 name 字段
});
$.getScript("extra.js", function () {
  console.log("脚本已加载并执行"); // 输出:脚本已加载并执行
});

$.ajax() 全能方法

$.ajax() 用一个配置对象控制请求的每个环节,其余方法都是它的简化版:

$.ajax({
  url: "user.php",          // 请求地址
  type: "POST",             // 请求方式,默认 GET
  data: { id: 10 },         // 发送的数据
  dataType: "json",         // 期望返回类型,会自动解析
  timeout: 3000,            // 3 秒超时
  success: function (res) {
    console.log(res.name);       // 请求成功:输出返回的 name
  },
  error: function (xhr) {
    console.log("失败:" + xhr.status); // 请求失败:输出状态码
  },
  complete: function () {
    console.log("请求结束");      // 无论成败都会执行
  }
});

全局 AJAX 事件

旧版 jQuery 提供 ajaxStart、ajaxStop、ajaxComplete、ajaxError、ajaxSuccess 等全局事件,可在任意元素上监听"所有请求"的动向。从 jQuery 3.0 起它们已不推荐使用,建议改用 $.ajax() 各自的回调,故这里只作了解。

表单序列化方法

提交前把表单内容自动拼成查询串或对象数组,省去手工取值:

var s = $("#form1").serialize();        // 结果形如 "user=张三&age=20"
var arr = $("#form1").serializeArray(); // [{name:"user",value:"张三"},...]
var q = $.param({ a: 1, b: 2 });        // 把对象转成 "a=1&b=2"
console.log(s, q);                      // 输出:序列化后的查询串
// 之后可配合 $.post($("#form1").attr("action"), s, fn) 一键提交

小结:日常用 $.get/$.post/$.getJSON 足够,遇到超时、请求头、错误细分等复杂需求就用 $.ajax();serialize 系列则让表单提交变得一行搞定。

笔记加载中…