JQuery

Posted on 2022-03-19 15:11  夜雨初凉  阅读(384)  评论(0编辑  收藏  举报

一、预备

本内容需要具备的基础知识:

​ html、css、javascript

若js基础知识不牢固,稍做复习,顺带了解下ES6

1、javascript组成

JavaScript的实现包括以下3个部分:

  • 核心(ECMAScript):描述了JS的语法和基本对象。
  • 文档对象模型 (DOM):处理网页内容的方法和接口。
    • 针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。
    • DOM 有什么用?就是为了操作 HTML 中的元素,比如说我们要通过 JS 把这个网页的标题改了,直接这样就可以了:document.title = '我的标题';
  • 浏览器对象模型(BOM):与浏览器交互的方法和接口。
    • window对象
      • BOM的核心对象是window,他表示浏览器的一个实例。他既是通过JavaScript访问浏览器窗口的一个接口,又是ECMScript规定的Global对象。
    • location对象
      • location最有用的对象之一;既是window对象的属性又是document对象的属性
      • window.location == document.location ,他们两个指向的是同一个对象
    • navigator对象
      • 检测显示网页的浏览器类型;常用的是检测是否安装了特定插件
    • srceen对象
      • 用处不大,用于站点分析
    • history对象
      • history对象保存着用户上网的历史记录

DOM和BOM最大区别

  • DOM 是为了操作文档出现的 API,document 是其的一个对象;
  • BOM 是为了操作浏览器出现的 API,window 是其的一个对象。

2、函数

  • 具名函数
//一般写法
function 名字(){

}
//特殊写法,很少见,了解即可
var a = function b(){

}
//上面的特殊写法可以看成(注意:仅仅只能说是看成,这样方便理解)
var a = function(){
  b();
  function b(){

  }
}
  • 匿名函数
var f = function(){

}

3.1、new function 和 fuction区别

  • new function:当函数无返回值,或返回值基本类型时,会忽略掉返回值,并构造一个对象返回,并将函数内的this指向构造出来的对象
let fuc1 = function(){
    this.name = '张三';
    this.age = 18;
    return "基本类型的字符串";
}

let o1 = new fuc1();
//对象值为:{name: '张三', age: 18}
console.info(o1);


let fuc2 = function(){
    this.name = '张三';
    this.age = 18;
    //无返回值
}
let o2 = new fuc2();
//对象值为:{name: '张三', age: 18}
console.info(o2);

  • new function:当函数有返回值,且返回值为 对象或数组时,同样也会构造一个对象,并将函数内的this指向构造出来的对象,但是返回的 对象或数组会替换掉构造出来的对象返回出去
let fuc1 = function(){
    this.name = '张三';
    this.age = 18;
    return new Array(1,2,3);
}
let o1 = new fuc1();
//打印:[1, 2, 3] ,因为返回数组,替换掉了构造出来的对象
console.info(o1);

let fuc2 = function(){
    this.name = '张三';
    this.age = 18;
    return {
        sex:"男"
    }
}
let o2 = new fuc2();
//打印:{sex: '男'},因为返回对象,替换掉了构造出来的对象
console.info(o2);
  • 直接调用function: 若函数不作为对象值存在,那么函数归属window对象,即:其内部this指向window对象
function fuc1(){
   console.info('fuc1 this:',this);//此this指向window对象
   function fuc2(){
       console.info('fuc2 this:',this);//此this指向window对象
   }
   fuc2();
}
//正常调用,注:这里没有使用new 去调用它的构造函数
fuc1();
//同学们可以猜想一下,我调用下面这行代码 fuc1 和 fuc2的this分别指向的是谁?
//new fuc1();
  • 直接调用funciton:若函数作为对象值存储,那么函数归属此对象,即:其内部this指向该对象
let obj = {
    fuc2 : function(){
        //此函数归属于obj对象,所以this指向的是obj对象
        console.info('fuc2 this:',this);
    }
}
obj.fuc2();

3、js预解析

同学们可以理解ES5中有2种变量

  • var 可以装任意类型的值,包括函数
  • function 变量的值只能装函数,且在预解析时不能被var变量覆盖

JS代码,人看到的和机器看到的是不一样,JS引擎在执行JS代码时,不是一上来就执行,而是做些准备工作:

  1. 扫描代码,并且找var 和function关键字,并且把他们提升到作用域顶部 (预解析)
    1. 对待变量,只管声明,不管赋值
    2. 对待函数,整体提升到顶部
  2. 逐行解读代码(从上到下、从左到右,即人看到的代码)

预解析题目1:下面代码分别打印什么

console.log(a);
var a=10;
console.log(a);

function myFun(){
    var b;
    console.log(b); 
    var b=20;
    console.log(b);
}
myFun(); 

预解析题目2:下面代码分别弹出什么

alert(a); 
var a=1;
alert(a);
function a(){
	alert("222");
}

var a=3; 
alert(a);
function a(){
	alert("444");
}
alert(a);
a();

预解析题目3:下面代码分别弹出什么

alert(n);
fn();
if(false){
    var n = 10;
    function fn(){
        alert('hello');
    }
}

预解析题目4:下面代码分别打印什么

console.log(f1); 
console.log(f2); 
function f1() {
    return "f1";
}
var f2 = function() {return "f2"}

预解析题目5:下面代码分别弹出什么

alert(a); 
a++;
alert(a);   
var a = '我是变量';
function a(){ alert('我是函数') }
alert(a) 

5、ES6新增内容

5.1、新增的声明变量的方式

  • var-缺点:支持不声明就使用,没有块级作用域,允许重复声明等
  • let -- 代替var,解决了var的缺点
    • 是块级作用域,无论在哪里声明,都只能在所包含的作用域内访问,比如函数和代码块({}这种形式)都可以形成块级作用域
    • 在同级作用域内,不能重复声明,多个层级嵌套,只在最接近的{}内有效
    • 没有变量提升,也就是没有预解析,必须要先声明再使用(即所谓的暂死区,变量没执行时是不会被扫描到的,必须执行到才会将变量释放并可用)
  • const--常量 完整单词: constant
    • 特点同let,唯一区别就是声明后就要赋值,且不可修改

示例:

var a=1;
var a=2;

// 以上let不可以
// 不允许重复声明
let b=1;
var b=2;
const PI=3.14;
// 不允许修改值
PI=5;
console.log(PI)

5.2、解构赋值

  • 批量声明变量
//批量声明变量
// var a=1;
// var b=2;
// var c=3;
// var d=4;

// 优化:
// 将左边的数组按照一定的模式解开用将右边的值赋值给它
var [a,b,c,d]=[function(){},2,'啊哈哈',true];
console.log(a);//1
a();

// 1、可以左右的数量不一样
// 不影响
var [a,b]=[function(){},2,'啊哈哈',true];
// 2、c,d则变undefined
var [a,b,c,d]=[function(){},2];

// 3、给默认值
var [a,b,c=1,d=10]=[function(){},2];
  • 对象解构赋值
//对象解构赋值
var {a,b,c}={
    a:"bar",
    c:function(){},
    b:"foo"
};

  • 函数参数解构赋值
// 函数参数的解构赋值
function fun([a,b]){
    console.log(a+b);
}
fun([1,2]);

function fun({name,age}){
    console.log(name+age);
}
fun({name:"张三",age:20});

5.3、模板字符串

加强版的“”

注:jsp中使用若要使用模板字符串需要禁用el表达式,因为el表达式取值方式与模板字符串中的取值方式有冲突

示例:

//非模板字符串
var a=1;
var html="<div>"+a+"</div>";

// 模板字符串
var html2=`
<div>${a}</div>
<div>002</div>
<div>003</div>
`;

5.4、对象的简洁表示法

如果属性名和属性值一样,则可以简写为1个

对于方法可以省略:function关键字

//正常写法
var obj={
    a:1,
    b:2,
    c:function(){
        alert(1)
    }
}


// 对于对象:
// 1.如果属性名和属性值一样,,则可以简写为1个
// 2.对于方法可以省略:function关键字
var a=1;

var obj={
    //名称和变量a一样
    a,
    b:2,
    //function可省略
    c(){
        alert(1)
    }
}

5.5、扩展运算符

作用:深度合并数组或对象

用法:...变量名

对数组使用扩展运算符

var a=[1,2]
var b=[4,5]

//合并a+b为一个数组
//如果用传统方式
// var c=a.concat(b);
// 扩展运算符
var c=[...a,...b];

console.log(c)

对对象使用扩展运算符

var a={
    name:"张三",
    age:17
}

var b={
    age:18
}


// 原来:合并需要用for-in循环,一个个挑出来放到新对象中
// 现在:
var c={...a,...b}
console.log(c)

5.6、箭头函数-重要的

箭头函数指的是用箭头定义的函数。任何普通函数都可以改为箭头函数。

3条规则:

  • 省略function关键字和函数名,然后()和{}之间用=>连接
  • 如果只有1个参数,则()可以省略
  • 如果只有一条语句,而且还是return语句,则{}也可以省略

区别:

  • 不能当做构造函数,即前面不能加new
  • 普通函数的this若不作为对象属性值存在,并且在调用时不加new,那么它的this指向window,若作为对象值存在它的this指向对象
  • 箭头函数的this始终指向上一个作用域的this

示例1:

let fuc = a=>"你好:"+a;
let s = fuc('张三');
console.info(s);

示例2:仔细观察this对象

普通函数,若不作为对象的属性值存在或不调用它的构造函数,那么它始终归属于window对象,其this也是指向window对象

function fuc1(){
   console.info('fuc1 this:',this);//此this指向window对象
   function fuc2(){
       console.info('fuc2 this:',this);//此this指向window对象
   }
   fuc2();
}
//正常调用,注:这里没有使用new 去调用它的构造函数
fuc1();

调用箭头函数,其this始终指向上一个作用域的this

let obj = {
    fuc1 : () =>{
        //指向上一作用域的this
        //由于上一个作用域是obj,此obj在window对象中,所以this指向的是window对象
        console.info('fuc1 this:',this);
    },
    fuc2 : function(){
        //此函数归属于obj对象,所以this指向的是obj对象
        console.info('fuc2 this:',this);
    }
}
obj.fuc1();
obj.fuc2();

调用箭头函数,其this始终指向上一个作用域的this

let obj = {
    fuc1 : function(){
        //此函数归属于obj对象,所以this指向的是obj对象
        console.info('fuc1 this:',this);
        let fuc2 = () =>{
            //指向上一作用域的this
            //由于上一个作用域的函数归属obj对象,所以this指向的是obj对象
            console.info('fuc2 this:',this);

            let fuc3 = ()=>{
                //指向上一个作用域this
                console.info('fuc3 this:',this);
            }
            fuc3();
        }
        fuc2();
    }
}
obj.fuc1();

二、jquery

1、jquery是什么?

jQuery 是一个 JavaScript 库(或JavaScript框架)。jQuery设计的宗旨是“Write Less,Do More”,即倡导写更少的代码,做更多的事情。

优点:

​ jQuery 极大地简化了 JavaScript 编程。

​ 完善的ajax以及浏览器兼容性

​ 对页面html代码侵入性小

​ jQuery 很容易学习。

2、jquery选择器

2.1、基础语法

jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作。

基础语法是:$(selector).action()

  • 美元符号定义 jQuery
  • 选择符(selector)“查询”和“查找” HTML 元素
  • jQuery 的 action() 执行对元素的操作

提示:jQuery 选择器使用的语法是 XPath 与 CSS 选择器语法的组合。

示例:

$("p").hide() //隐藏所有段落
$(".test").hide() //隐藏所有 class="test" 的所有元素
$("#test").hide()  //隐藏所有 id="test" 的元素

2.2、等待html页面加载完毕才调用的函数

$(document).ready(function(){

//当html页面渲染完毕后将执行此函数

});

如果你在html页面没有渲染完毕之前就行操作,可能会有很多问题,如:

​ 元素还没渲染出来你就去获取并操作它

​ 图片还没下载完毕你就去获取它的高宽

​ ...

示例:

这种情况是无法获取到id为 name的元素的

<!-- 引入jquery脚本库 -->
<script type="text/javascript" src="./js/jquery-1.8.3.js"></script>
<script type="text/javascript">
    //获取id 为name的元素
    let el = document.getElementById("name");
    //打印一下看看能不能获取到
    console.info("el",el)
</script>
<body>
    姓名:<input id="name"/>
</body>

将上面的代码修改一下,运用jquery中的 $(document).ready 函数 就能获取到了

<script type="text/javascript" src="./js/jquery-1.8.3.js"></script>
<script type="text/javascript">
    //获取id 为name的元素
    //let el = document.getElementById("name");
    //打印一下看看能不能获取到
    //console.info("el",el)
    /**
		* $(document).ready(func) 
		* func:回调函数
		* 作用:当页面渲染完毕后,将执行 func 这个回调函数
		*/
    $(document).ready(function(){
        //获取id 为name的元素
        //原生js写法
        let el = document.getElementById("name");
        //利用jquery获取元素,注意:获取到的元素对象是 jquery的元素类型,并非document中的 元素类型 
        let jqEl = $("#name");
        console.info("el:",el)
        console.info("jqEl:",jqEl)
        //如果要将 jquery的元素类型转换为 document中的元素类型,如下
        let el2 = jqEl[0];
        //如果要将 document中的元素类型转换为 jquery元素类型,如下
        let jqEl2  = $(el);
    });
</script>
<body>
    姓名:<input id="name"/>
</body>


2.3、下面常见的选择器写法给同学们示例一下

语法 描述
$(this) 当前 HTML 元素
$("p") 所有

元素

$("p.intro") 所有 class="intro" 的

元素

$(".intro") 所有 class="intro" 的元素
$("#intro") id="intro" 的元素
$("ul li:first") 每个
    的第一个
  • 元素
$("[href$='.jpg']") 所有带有以 ".jpg" 结尾的属性值的 href 属性
$("div#intro .head") id="intro" 的
元素中的所有 class="head" 的元素

2.4、选择器参考手册

元素 元素
选择器 实例 选取
* $("*") 所有元素
#id $("#lastname") id="lastname" 的元素
.class $(".intro") 所有 class="intro" 的元素
element $("p") 所有

元素

.class.class $(".intro.demo") 所有 class="intro" 且 class="demo" 的元素
:first $("p:first") 第一个

元素

:last $("p:last") 最后一个

元素

:even $("tr:even") 所有偶数
:odd $("tr:odd") 所有奇数
:eq(index) $("ul li:eq(3)") 列表中的第四个元素(index 从 0 开始)
:gt(no) $("ul li:gt(3)") 列出 index 大于 3 的元素
:lt(no) $("ul li:lt(3)") 列出 index 小于 3 的元素
:not(selector) $("input:not(:empty)") 所有不为空的 input 元素
:header $(":header") 所有标题元素

-

:animated 所有动画元素
:contains(text) $(":contains('W3School')") 包含指定字符串的所有元素
:empty $(":empty") 无子(元素)节点的所有元素
:hidden $("p:hidden") 所有隐藏的

元素

:visible $("table:visible") 所有可见的表格
s1,s2,s3 $("th,td,.intro") 所有带有匹配选择的元素
[attribute] $("[href]") 所有带有 href 属性的元素
[attribute=value] $("[href='#']") 所有 href 属性的值等于 "#" 的元素
[attribute!=value] $("[href!='#']") 所有 href 属性的值不等于 "#" 的元素
[attribute$=value] $("[href$='.jpg']") 所有 href 属性的值包含以 ".jpg" 结尾的元素
:input $(":input") 所有 元素
:text $(":text") 所有 type="text" 的 元素
:password $(":password") 所有 type="password" 的 元素
:radio $(":radio") 所有 type="radio" 的 元素
:checkbox $(":checkbox") 所有 type="checkbox" 的 元素
:submit $(":submit") 所有 type="submit" 的 元素
:reset $(":reset") 所有 type="reset" 的 元素
:button $(":button") 所有 type="button" 的 元素
:image $(":image") 所有 type="image" 的 元素
:file $(":file") 所有 type="file" 的 元素
:enabled $(":enabled") 所有激活的 input 元素
:disabled $(":disabled") 所有禁用的 input 元素
:selected $(":selected") 所有被选取的 input 元素
:checked $(":checked") 所有被选中的 input 元素

3、jquery操作html

3.1、获取 text()、html()以及 val()

  • text() - 设置或返回所选元素的文本内容
  • html() - 设置或返回所选元素的内容(包括 HTML 标记)
  • val() - 设置或返回表单字段的值

示例1:通过 jQuery text() 和 html() 方法来获得内容

$("#btn1").click(function(){
  alert("Text: " + $("#test").text());
});
$("#btn2").click(function(){
  alert("HTML: " + $("#test").html());
});

示例2:通过 jQuery val() 方法获得输入字段的值:

$("#btn1").click(function(){
  alert("Value: " + $("#test").val());
});

3.2、设置内容和属性

3.1、设置内容---text()、html() 以及 val()

  • text() - 设置或返回所选元素的文本内容
  • html() - 设置或返回所选元素的内容(包括 HTML 标记)
  • val() - 设置或返回表单字段的值****

示例:

$("#btn1").click(function(){
  $("#test1").text("Hello world!");
});
$("#btn2").click(function(){
  $("#test2").html("<b>Hello world!</b>");
});
$("#btn3").click(function(){
  $("#test3").val("Dolly Duck");
});

3.2、属性操作

3.2.1、设置属性---attr()

示例:改变(设置)链接中 href 属性的值

$("button").click(function(){
  $("#w3s").attr("href","http://www.w3school.com.cn/jquery");
});

3.2.1、移出属性 --- removeAttr('name')

示例:

$("#formStart").removeAttr("id");

3.3、添加元素

添加新内容的四个 jQuery 方法:

  • append() - 在被选元素的结尾插入内容
  • prepend() - 在被选元素的开头插入内容
  • after() - 在被选元素之后插入内容
  • before() - 在被选元素之前插入内容

3.3.1、append()

实例

$("p").append("Some appended text.");

3.3.2、prepend()

实例

$("p").prepend("Some prepended text.");

3.3.3、after()、before()

实例

$("img").after("Some text after");

$("img").before("Some text before");

3.4、删除元素

删除元素和内容,一般可使用以下两个 jQuery 方法:

  • remove() - 删除被选元素(及其子元素)
  • empty() - 删除被选元素中的子元素

3.4.1、remove()

实例

$("#div1").remove();

3.4.2、empty()

实例

$("#div1").empty();

3.5、操作css

jQuery 拥有很多操作CSS的方法。我们只讲下面这些:

  • addClass() - 向被选元素添加一个或多个类
  • removeClass() - 从被选元素删除一个或多个类
  • toggleClass() - 对被选元素进行添加/删除类的切换操作
  • css() - 设置或返回样式属性

实例样式表

下面的样式表将用于本页的所有例子:

.important
{
font-weight:bold;
font-size:xx-large;
}

.blue
{
color:blue;
}

3.5.1、addClass()

实例:添加单个class

$("button").click(function(){
  $("h1,h2,p").addClass("blue");
  $("div").addClass("important");
});

实例:添加多个class

$("button").click(function(){
  $("#div1").addClass("important blue");
});

3.5.2、removeClass()

实例:删除指定的class

$("button").click(function(){
  $("h1,h2,p").removeClass("blue");
});

3.5.3、toggleClass()

实例

$("button").click(function(){
  $("h1,h2,p").toggleClass("blue");
});

3.5.4、css()

语法:

  • 返回第一个匹配元素的 CSS 属性值。
$(selector).css(name)
参数 描述
name 必需。规定 CSS 属性的名称。该参数可包含任何 CSS 属性。比如 "color"。

示例:取得第一个段落的 color 样式属性的值:

$("p").css("color");
  • 设置所有匹配元素的指定 CSS 属性。
$(selector).css(name,value)
参数 描述
name 必需。规定 CSS 属性的名称。该参数可包含任何 CSS 属性,比如 "color"。
value 可选。规定 CSS 属性的值。该参数可包含任何 CSS 属性值,比如 "red"。如果设置了空字符串值,则从元素中删除指定属性。

示例:将所有段落的颜色设为红色

$("p").css("color","red");

3.6、尺寸

jQuery 提供多个处理尺寸的重要方法:

  • width() :设置/获取 元素宽度(不包括内边距、外边距)
  • height():设置/获取 元素高度(不包括内边距、外边距)
  • innerWidth():设置/获取 元素宽度(包括内边距)
  • innerHeight():设置/获取 元素高度(包括内边距)
  • outerWidth():设置/获取 元素宽度(包括边框和内边距)
  • outerHeight():设置/获取 元素高度(包括边框和内边距)

示例:太简单了,懒得写了

4、jquery事件

事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件。

示例:

进入页面就点击按钮

<!-- 引入jquery脚本库 -->
<script type="text/javascript" src="./js/jquery-1.8.3.js"></script>
<script type="text/javascript">
	//定义了一个匿名函数,并将这个函数保存到了 fuc 这个变量中
	let fuc = function(){
		//获取按钮这个元素	
		let jqEl = $("button.btn");
		
		//jquery对 jqEl元素的点击事件的处理
		jqEl.click(
			//当jqEl这个元素被点击后,将调用该函数
			//event:事件的相关信息都在此对象中
			function(event){
				//打印
				console.info("*** jquery:你点我干啥。。。")
			}
		);
		//触发点击事件
		jqEl.click();
	}

	$(document).ready(
		//页面渲染完毕后,将调用fuc这个函数
		fuc
	);
	
	//定义了一个函数,用于处理原生的 点击事件
	function protoClick(){
		//打印一下
		console.info("***原生:你点我干啥。。。")
	}
	
	
</script>
<body>
  <button class="btn" onclick="protoClick()">按钮</button>
</body>

4.1、事件所有函数

选几个常用的给同学们演示一下

方法 描述
通用事件绑定相关
bind() 向匹配元素附加一个或更多事件处理器
live() 为当前或未来的匹配元素添加一个或多个事件处理器。1.7版本之后被弃用
delegate() 向匹配元素的当前或未来的子元素附加一个或多个事件处理器
one() 向匹配元素添加事件处理器。每个元素只能触发一次该处理器。
解除绑定事件相关
unbind() 从匹配元素移除一个被添加的事件处理器
die() 移除所有通过 live() 函数添加的事件处理程序。
undelegate() 从匹配元素移除一个被添加的事件处理器,现在或将来
单独绑定相关
blur() 触发、或将函数绑定到指定元素的 blur(聚焦) 事件
focus() 触发、或将函数绑定到指定元素的 focus(失焦) 事件
change() 触发、或将函数绑定到指定元素的 change(内容被改变) 事件
click() 触发、或将函数绑定到指定元素的 click(单击) 事件
dblclick() 触发、或将函数绑定到指定元素的 double click(双击) 事件
error() 触发、或将函数绑定到指定元素的 error 事件
toggle() 绑定两个或多个事件处理器函数,当发生轮流的 click 事件时执行。
事件触发相关
trigger() 所有匹配元素的指定事件
triggerHandler() 第一个被匹配元素的指定事件
加载/渲染相关
ready() 文档就绪事件(当 HTML 文档就绪可用时)
load() 触发、或将函数绑定到指定元素的 load (元素被加载/渲染完毕)事件
unload() 触发、或将函数绑定到指定元素的 unload( 用户离开页面时,如:点击某个离开页面的链接、在地址栏中键入了新的 URL、使用前进或后退按钮、关闭浏览器、重新加载页面) 事件
按键相关
keydown() 触发、或将函数绑定到指定元素的 key down( 按键被按下:能捕获所有按键,包括删除键、组合键、切换到中文输入法状态下的输入中文时的按键) 事件
keypress() 触发、或将函数绑定到指定元素的 key press (按键被按下:只能捕获产生ascii码的按键,如:回删键、切换到中文输入法状态下输入中文时的按键就不能捕获)事件
keyup() 触发、或将函数绑定到指定元素的 key up(按键弹起) 事件
鼠标相关
mousedown() 触发、或将函数绑定到指定元素的 mouse down( 按下鼠标按键时 ) 事件
mouseup() 触发、或将函数绑定到指定元素的 mouse up(松开鼠标按键时) 事件
mouseenter() 触发、或将函数绑定到指定元素的 mouse enter( 鼠标移动到元素上时) 事件
mouseover() 触发、或将函数绑定到指定元素的 mouse over 事件(鼠标移动到元素上时,和mouse enter事件的区别在于在移动到其内的子元素上会再次触发mouse over事件,而mouse enter则不会
mouseleave() 触发、或将函数绑定到指定元素的 mouse leave( 鼠标指针离开元素时 ) 事件
mouseout() 触发、或将函数绑定到指定元素的 mouse out( 鼠标指针离开元素时,和mouse leave的区别在于 哪怕是鼠标离开这个元素的内的子元素,就会触发mouse out事件,而mouse leave则不会 ) 事件
mousemove() 触发、或将函数绑定到指定元素的 mouse move(鼠标移动时) 事件
其他
resize() 触发、或将函数绑定到指定元素的 resize(当调整窗口或元素大小时触发) 事件
scroll() 触发、或将函数绑定到指定元素的 scroll(滚动) 事件
select() 触发、或将函数绑定到指定元素的 select(  textarea 或文本类型的 input 元素中的文本被选择时 ) 事件
submit() 触发、或将函数绑定到指定元素的 submit( 当提交表单时 ) 事件。 该事件只适用于表单元素。

笔记中我就列几个可能稍微没那么容易理解的事件绑定

4.1.1、通用事件绑定相关

4.1.1.1、bind()--单个、live()、one()

语法:

//bind 单个
$(selector).bind(event,data,function)
//live
$(selector).live(event,data,function)
//one
$(selector).one(event,data,function)
参数 描述
event 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。
data 可选。规定传递到函数的额外数据。
function 必需。规定当事件发生时运行的函数。

示例bind():

<script type="text/javascript">
	$(document).ready(function() {
		//找到button元素,并给它绑定click事件
		$("button").bind("click", function() {
			//显示 和 隐藏的动画
			$("p").slideToggle();
		});
	});
</script>
<body>
	<p>这是一个段落。</p>
	<button>请点击这里</button>
</body>

示例live():

<script type="text/javascript">
	$(document).ready(function() {
		//给所有的 p元素,注意:包括未来添加的p元素,添加绑定事件
		$("p").live("click", function() {
			//显示/隐藏动画
			$(this).slideToggle();
		});
		//给按钮添绑定一个点击事件
		$("button").click(function() {
			//在button元素后面插入一段段落
			$("<p>This is a new paragraph.</p>").insertAfter("button");
		});
	});
</script>
<body>
	<p>这是一个段落。</p>
	<p>点击任意 p 元素会令其消失。包括本段落。</p>
	<button>在本按钮后面插入新的 p 元素</button>
	<p>
		<b>注释:</b>通过使用 live() 方法而不是 bind() 方法,新的 p 元素同样会在点击时消失。
	</p>
</body>
4.1.1.2、bind() --多个

语法bind(),绑定多个事件:

$(selector).bind({event:function, event:function, ...})

示例bind()绑定多个事件:

<script type="text/javascript">
	$(document).ready(function() {
		//给所有的button绑定如下事件
		$("button").bind({
			//点击事件
			click : function() {
				//来个显示个隐藏的动画
				$("p").slideToggle();
			},
			//鼠标移动到这个按钮上的事件
			mouseover : function() {
				//给body背景色设置为红色
				$("body").css("background-color", "red");
			},
			//鼠标移出这个按钮区域
			mouseout : function() {
				//给body背景色 设置为白色
				$("body").css("background-color", "#FFFFFF");
			}
		});
	});
</script>
<body>
	<p>This is a paragraph.</p>
	<button>请点击这里</button>
</body>
4.1.1.3、delegate()

语法:

$(selector).delegate(childSelector,event,data,function)
参数 描述
childSelector 必需。规定要附加事件处理程序的一个或多个子元素。
event 必需。规定附加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。
data 可选。规定传递到函数的额外数据。
function 必需。规定当事件发生时运行的函数。

示例:

<script type="text/javascript">
	$(document).ready(function() {
		//找到div这个元素,给div下的所有buttion元素都绑定 click事件
		$("div").delegate("button", "click", function() {
			//显示 和 隐藏的动画
			$("p").slideToggle();
		});
	});
</script>
</head>
<body>
<div style="background-color:red">
	<p>这是一个段落。</p>
	<button>请点击这里</button>
</div>

4.1.2、解除绑定事件相关

4.1.2.1、unbind()、die()

注意:

  • unbind 移除的是通过 bind函数绑定的事件
  • die 移除的是通过live函数绑定的事件

语法 unbind()、die()移除事件

//unbind
$(selector).unbind(event,function)
//die
$(selector).die(event,function)
参数 描述
event [可选]。规定要移除的一个或多个事件处理程序。由空格分隔多个事件值。必须是有效的事件。
function 可选。规定要移除的特定函数。

示例 die(),unbind就不示例了,和die差不太多

<script type="text/javascript">
	//更改字体大小的函数
	function changeSize() {
		/*
		* animate() 方法执行 CSS 属性集的自定义动画。
		* 该方法通过CSS样式将元素从一个状态改变为另一个状态。CSS属性值是逐渐改变的,这样就可以创建动画效果。
		* 只有数字值可创建动画(比如 "margin:30px")。字符串值无法创建动画(比如 "background-color:red")。
		*/ 
		//字体大小注解 加大,总计 加 3个像素
		$(this).animate({
			fontSize : "+=3px"
		});
	}
	//更改字符间距的函数
	function changeSpacing() {
		//字符间距逐渐加宽,总计 加2个像素
		$(this).animate({
			letterSpacing : "+=2px"
		});
	}
	$(document).ready(function() {
		//使用live函数给 p元素绑定了 changeSize 函数
		$("p").live("click", changeSize);
		//使用live函数给 p元素绑定了 changeSpacing 函数
		$("p").live("click", changeSpacing);
		
		//给按钮绑定点击事件
		$("button").click(function() {
			//移出所有p元素的 所有通过 live() 绑定的事件
			//$("p").die();
			//移出所有p元素的 所有通过 live() 绑定的click事件
			//$("p").die("click");
			//移出所有p元素的 所有通过 live() 绑定的 click-> changeSize 的事件
			$("p").die("click",changeSize);
		});
	});
</script>
</head>
<body>
	<p>这是一个段落。</p>
	<p>这是另一个段落。</p>
	<p>点击任意 p 元素可以增加尺寸和字间距。包括该段落。</p>
	<button>移除通过 live() 方法为 p 元素添加的 changeSize() 事件处理器</button>
</body>
4.1.2.2、undelegate()

语法:

$(selector).undelegate(selector,event,function)
参数 描述
selector 可选。规定需要删除事件处理程序的选择器。
event 可选。规定需要删除处理函数的一个或多个事件类型。
function 可选。规定要删除的具体事件处理函数。

示例:

<script type="text/javascript">
	//更改字体大小函数
	function changeSize() {
		//逐渐增加,总量为3px
		$(this).animate({
			fontSize : "+=3px"
		});
	}
	//更改字符间距函数
	function changeSpacing() {
		//逐渐增加 ,总量为2px
		$(this).animate({
			letterSpacing : "+=2px"
		});
	}

	$(document).ready(function() {
		//给body下的 所有 p子元素 绑定 事件
		$("body").delegate("p", "click", changeSize);
		$("body").delegate("p", "click", changeSpacing);
		//给按钮绑定的点击事件
		$("button").click(function() {
			//移除body下所有子元素通过 delegate() 绑定的事件
			//$("body").undelegate();
			
			//移除 body下 所有p子元素 click -> changeSize 这个事件
			$("body").undelegate("p", "click", changeSize);
		});
	});
</script>
</head>
<body>
	<p>这是一个段落。</p>
	<p>这是另一个段落。</p>
	<p>点击任何段落增加字体大小和字符间距。包括本段落。</p>
	<button>从 p 元素删除由 delegate() 方法添加的事件处理器 changeSize()</button>
</body>

4.1.3、单独绑定相关

4.1.3.1、blur() 、focus()、error()

语法:

  • blur()
$(selector).blur(function)
参数 描述
function 可选。规定当 blur 事件发生时运行的函数。
  • focus()
$(selector).focus(function)
参数 描述
function 可选。规定当发生 focus 事件时运行的函数。
  • error()
$(selector).error(function)
参数 描述
function 可选。规定当发生 error 事件时运行的函数。
  • 示例:blur、focus:
<script type="text/javascript">
	$(document).ready(function() {
		//给所有input元素绑定 聚集焦点事件
		$("input").focus(function() {
			//给所有input元素设置背景色
			$("input").css("background-color", "#FFFFCC");
		});
		//给所有input元素绑定失去焦点事件
		$("input").blur(function() {
			//给所有input元素设置背景色
			$("input").css("background-color", "#D6D6FF");
		});
	});
</script>
<body>
	Enter your name:<input type="text" />
	<p>请在上面的输入域中点击,使其获得焦点,然后在输入域外面点击,使其失去焦点。</p>
</body>
  • 示例:error:
<script type="text/javascript">
	$(document).ready(function() {
		//给所有的img元素绑定一个 出错时的事件
		$("img").error(function() {
			//如果发生错误,将执行此函数
			//将当前img元素 替换为 “图片为加载!” 这么一段文本
			$(this).replaceWith("<p><b>图片未加载!</b></p>");
		});
	});
</script>
<body>
	<!-- 我这里先给一个错误的路径,肯定加载不了图片 -->
	<img src="XXXX" />
	<!-- 在准备一个正确的图片 -->
	<img src="./blhx.jpg" />
	
	<p>如果上面的图像没有正确地加载,会被替换为一段 "图片未加载" 的文本。</p>
</body>
4.1.3.2、change()、click()、dblclick()

语法,这些都差不太多,一块讲了,就不做示例了:

//change 内容被改变
$(selector).change(function)
//click 单击
$(selector).click(function)
//dbclick 双击
$(selector).dblclick(function)
参数 描述
function 可选。规定当发生事件时运行的函数。
4.1.3.3、toggle()

语法1:

$(selector).toggle(function1(),function2(),functionN(),...)
参数 描述
function1() 必需。规定当元素在每偶数次被点击时要运行的函数。
function2() 必需。规定当元素在每奇数次被点击时要运行的函数。
functionN(),... 可选。规定需要切换的其他函数。

示例1:

<script type="text/javascript">
$(document).ready(function(){
	//绑定轮流点击时间	
	$("button").toggle(
		//这里面总共绑定了3个函数
		//当点击次数能被3整除时调用该函数
		function(){
			//设置body背景色为绿色
			$("body").css("background-color","green");
		},
		//当点击次数除3余1时调用该函数
		function(){
			//设置body背景色为红色
	  		$("body").css("background-color","red");
		},
		//当点击次数除3余2时调用该函数
		function(){
			//设置body背景色为黄色
	  		$("body").css("background-color","yellow");
		}
	);
});
</script>
<body>
	<button>请点击这里,来切换不同的背景颜色</button>
</body>

4.1.4、事件触发相关

4.1.4.1、trigger()

语法:

$(selector).trigger(event,[param1,param2,...])
参数 描述
event 必需。规定指定元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。
[param1,param2,...] 可选。传递到事件处理程序的额外参数。额外的参数对自定义事件特别有用。

示例:

触发 input 元素的 select 事件:

$("button").click(function(){
  $("input").trigger("select");
});
4.1.4.2、triggerHandler()

triggerHandler() 方法与 trigger() 方法类似,都是触发事件。trigger() 方法相比的不同之处

  • 它不会引起事件(比如表单提交)的默认行为
  • .trigger() 会操作 jQuery 对象匹配的所有元素,而 .triggerHandler() 只影响第一个匹配元素。
  • 由 .triggerHandler() 创建的事件不会在 DOM 树中冒泡;如果目标元素不直接处理它们,则不会发生任何事情。
  • 该方法的返回的是事件处理函数的返回值,而不是具有可链性的 jQuery 对象。此外,如果没有处理程序被触发,则这个方法返回 undefined。

语法:

$(selector).triggerHandler(event,[param1,param2,...])
参数 描述
event 必需。规定指定元素要触发的事件。
[param1,param2,...] 可选。传递到事件处理程序的额外参数。

示例:

触发表单提交按钮的click事件,注意:仅仅只是触发点击事件,不会触发提交事件

$("button").click(function(){
    //触发表单提交按钮的 点击事件
    $("input[type='submit']").triggerHandler("click");
});

4.1.5、加载/渲染相关

4.1.5.1、ready()

语法1:

$(document).ready(function)

语法2:

$().ready(function)

语法3:

$(function)

示例:

$(document).ready(funciton(){
    //做事情
});

$().ready(funciton(){
    //做事情
});

$(funciton(){
    //做事情
});
4.1.5.2、load()

注:亲测,此函数在 1.8.3 版本中已失效

语法:

//load 元素被加载/渲染完毕
$(selector).load(function)
参数 描述
function 可选。规定当发生事件时运行的函数。
4.1.5.3、unload()

语法:

//触发、或将函数绑定到指定元素的 unload( 用户离开页面时,如:点击某个离开页面的链接、在地址栏中键入了新的 URL、使用前进或后退按钮、关闭浏览器、重新加载页面) 事件
event.unload(function)

示例:

$(window).unload(function(){
  alert("Goodbye!");
});

4.1.6、按键相关

4.1.6.1、keydown()、keypress()、keyup()

语法:

//keydown 按键被按下:能捕获所有按键,包括删除键、组合键、切换到中文输入法状态下的输入中文时的按键
$(selector).keydown(function)
//按键被按下:只能捕获产生ascii码的按键,如:ctrl、回删键、切换到中文输入法状态下输入中文时的按键就不能捕获
$(selector).keypress(function)
//keyup 按键弹起
$(selector).keyup(function)
参数 描述
function 可选。规定当发生事件时运行的函数。

4.1.7、鼠标相关

4.1.7.1、mousedown()、mouseup()、mouseenter()、mouseover()、mouseleave()、mouseout()

语法:

//mousedown 按下鼠标按键时
$(selector).mousedown(function)
//mouseup 松开鼠标按键时
$(selector).mouseup(function)
//mouseenter 鼠标移动到元素上时
$(selector).mouseenter(function)
//mouseover 鼠标移动到元素上时,和mouse enter事件的区别在于在移动到其内的子元素上会再次触发mouse over事件,而mouse enter则不会
$(selector).mouseover(function)
//mouseleave 鼠标指针离开元素时
$(selector).mouseleave(function)
//mouseout 鼠标指针离开元素时,和mouse leave的区别在于 哪怕是鼠标离开这个元素的内的子元素,就会触发mouse out事件,而mouse leave则不会
$(selector).mouseout(function)
//mousemove 鼠标移动时
$(selector).mousemove(function)
参数 描述
function 可选。规定当发生事件时运行的函数。
4.1.7.2、mousemove()

语法:

$(selector).mousemove(function)
参数 描述
function 可选。规定当发生 mousemove 事件时运行的函数。

示例:

$(document).mousemove(function(e){
  $("span").text(e.pageX + ", " + e.pageY);
});

4.1.8、其他

4.1.8.1、resize()、scroll()、select()、

注意:

  • resize ,注:目前chrome 96.0.4664.45 64位版本的浏览器中此函数只能作用window(窗口)上有效
  • scroll ,注:目前chrome 96.0.4664.45 64位版本的浏览器中此函数只能作用window(窗口)、textArea上有效

语法:

//resize 当调整窗口或元素大小时触发 
$(selector).resize(function)
//scroll 滚动时触发
$(selector).scroll(function)
//select textarea 或文本类型的 input 元素中的文本被选择时触发
$(selector).select(function)
参数 描述
function 可选。规定当发生事件时运行的函数

示例:resize

//目前chrome 96.0.4664.45  64位版本的浏览器中此事件只能作用window(窗口)上有效
$(window).resize(function(){
    console.info("window 大小被改变,width:",$(this).width())
})

示例:scroll

//目前chrome 96.0.4664.45  64位版本的浏览器中此事件只能作用window(窗口)、textArea上有效
$(window).scroll(function(){
    console.info("*** 滚动条被滚动")
})
4.1.8.2、submit()

注意:

  • 如果你不传递函数,那么它的功能是 提交表单
  • 如果你传递函数,它的功能是 当你表单提交时,会执行函数内的代码

语法:注意--该事件只适用于表单元素。

$(selector).submit(function)
参数 描述
function 可选。规定当发生 submit 事件时运行的函数。

示例:

<script type="text/javascript">
	$(document).ready(function() {
		//给form元素绑定submit事件处理函数
		$("form").submit(function(e) {
			//弹个框
			alert("Submitted");
			//返回false 会阻止表单提交,返回true将让提交通过
			return false;
		});
	});
</script>
<body>
	<!-- 表单 -->
	<form name="input" action="" method="get">
		姓名: <input type="text" name="name" value="Mickey" size="20"> <br />
		<input type="submit" value="Submit">
	</form>
</body>

4.1.9、chrome浏览器查看元素绑定事件

7、原生Ajax 及其原理

7.1、什么是 AJAX?

AJAX = Asynchronous JavaScript And XML.

AJAX 并非编程语言。

AJAX 仅仅组合了:

  • 浏览器内建的 XMLHttpRequest 对象(从 web 服务器请求数据)
  • JavaScript 和 HTML DOM(显示或使用数据)

Ajax 是一个令人误导的名称。Ajax 应用程序可能使用 XML 来传输数据,但将数据作为纯文本或 JSON 文本传输也同样常见。

Ajax 允许通过与场景后面的 Web 服务器交换数据来异步更新网页。这意味着可以更新网页的部分,而不需要重新加载整个页面。

7.2、AJAX如何工作

  1. 网页中发生一个事件(页面加载、按钮点击)
  2. 由 JavaScript 创建 XMLHttpRequest 对象
  3. XMLHttpRequest 对象向 web 服务器发送请求
  4. 服务器处理该请求
  5. 服务器将响应发送回网页
  6. 由 JavaScript 读取响应
  7. 由 JavaScript 执行正确的动作(比如更新页面)

7.3、Ajax 的核心 XMLHttpRequest 对象

所有现代浏览器都支持 XMLHttpRequest 对象。

XMLHttpRequest 对象用于同幕后服务器交换数据。这意味着可以更新网页的部分,而不需要重新加载整个页面。

7.3.1、创建XMLHttpRequest 对象

所有现代浏览器(Chrome、IE7+、Firefox、Safari 以及 Opera)都有内建的 XMLHttpRequest 对象。

创建 XMLHttpRequest 的语法是:

let variable = new XMLHttpRequest();

老版本的 Internet Explorer(IE5 和 IE6)使用 ActiveX 对象:

let variable = new ActiveXObject("Microsoft.XMLHTTP");

为了应对所有浏览器,包括 IE5 和 IE6,要检查浏览器是否支持 XMLHttpRequest 对象。如果支持,创建 XMLHttpRequest 对象,如果不支持,则创建 ActiveX 对象:

var xhttp;
if (window.XMLHttpRequest) {
	xhttp = new XMLHttpRequest();
} else {
	//IE6, IE5 创建XMLHttpRequest对象
	xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

7.4、发送请求

向服务器发送请求,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:

//打开请求
xhttp.open("GET", "ajax_info.txt", true);
//开始请求并发送数据
xhttp.send();
方法 描述
open(method, url, async) 规定请求的类型
method:请求的类型:GET 还是 POST
url:服务器(文件)位置
async:true(异步)或 false(同步)
send() 向服务器发送请求(用于 GET)
send(string) 向服务器发送请求(用于 POST)
setRequestHeader(key,value) 设置请求头

示例:

<body>
	<h1>XMLHttpRequest 对象</h1>
	<p id="demo">让 AJAX 更改这段文本。</p>
	<button type="button" onclick="loadDoc()">更改内容</button>
	
	<script>
		function loadDoc() {
			//创建XMLHttpRequest对象
			var xhttp = new XMLHttpRequest();
			//get 同步的方式 打开请求
			xhttp.open("GET", "http://localhost:8080/js/ajax-test.txt", false);
			//发送数据
			xhttp.send();
			//获取响应的文本内容
			let txt = xhttp.responseText;
			//将文本内容更新到页面
			document.getElementById("demo").innerHTML = txt;
		}
	</script>
</body>

7.5、响应数据

通过XMLHttpRequest对象中如下3个属性,我们便能监听到响应的数据

属性 描述
onreadystatechange 定义了当 readyState 属性发生改变时所调用的函数。
readyState 保存了 XMLHttpRequest 的状态。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 正在处理请求
4: 请求已完成且响应已就绪
status 200: "OK"
403: "Forbidden"
404: "Page not found"
如需完整列表,自己百度找一找吧
statusText 返回状态文本(例如 "OK" 或 "Not Found")
responseText 当服务器响应成功后,响应结果会存入此属性中

每当 readyState 发生变化时就会调用 onreadystatechange 函数。

当 readyState 为 4,status 为 200 时,响应就绪:

示例:

function loadDoc() {
    var xhttp = new XMLHttpRequest();
    //监听响应状态发生变化的函数
    xhttp.onreadystatechange = function() {
        //如果readyState==4(请求完成) 且  status == 200(响应正常)
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById("demo").innerHTML =
            //响应的内容
            this.responseText;
       }
    };
    //get 异步方式 打开请求
    xhttp.open("GET", "http://localhost:8080/js/ajax-test.txt", true);
    //发送数据
    xhttp.send(); 
} 

8、jquery使用Ajax 以及 js 对象 与json串互转

jQuery 提供多个与 AJAX 有关的方法。

通过 jQuery AJAX 方法,能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON - 同时能够把这些外部数据直接载入网页的被选元素中。

提示:如果没有 jQuery,AJAX 编程还是有些难度的。

编写常规的 AJAX 代码并不容易,因为不同的浏览器对 AJAX 的实现并不相同。这意味着你必须编写额外的代码对浏览器进行测试。不过,jQuery 团队为我们解决了这个难题,我们只需要一行简单的代码,就可以实现 AJAX 功能。

8.1、jquery使用ajax

8.1.1、load()

load() 方法从服务器加载数据

语法:

$(selector).load(URL,data,callback);

参数:

  • URL 参数必需的,规定你希望加载的 URL。
  • data 可选的参数,规定与请求一同发送的查询字符串键/值对集合。
  • callback 可选的参数,是 load() 方法完成后所执行的函数名称。

可选的 callback 参数规定当 load() 方法完成后所要允许的回调函数。回调函数可以设置不同的参数:

  • responseTxt - 包含调用成功时的结果内容
  • statusTXT - 包含调用的状态
  • xhr - 包含 XMLHttpRequest 对象

示例1:

<script>
	$(document).ready(function() {
		$("button").click(function() {
			$("#div1").load(
				"http://localhost:8080/js/ajax-test.txt", 
				function(responseTxt, statusTxt, xhr) {
					//success :请求并响应成功
					if (statusTxt == "success"){
						//控制台打印看看响应内容
						console.info("外部内容加载成功!");
						console.info("responseTxt:",responseTxt);
						//改变这个div里面的文本内容
						$(this).text(responseTxt);
					}
					//error:请求或响应时 出错了
					if (statusTxt == "error"){
						console.info("Error: " + xhr.status + ": " + xhr.statusText);					
					}
				}
			);
		});
	});
</script>
<body>
	<div id="div1">
		<h2>使用 jQuery AJAX 来改变文本</h2>
	</div>
	<button>获得外部内容</button>
</body>

8.1.2、get()、post()

jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据

8.1.2.1、$.get() 方法

$.get() 方法通过 HTTP GET 请求从服务器上请求数据。

语法:

$.get(URL,callback);

参数:

  • URL 参数必需的,规定你希望加载的 URL。
  • callback 可选的参数,是 load() 方法完成后所执行的函数名称。

示例:

$("button").click(function() {
    //使用jquery发送 ajax get请求
    $.get(
        //请求路径
        "http://localhost:8080/js/ajax-test.txt",
        //请求执行完毕后的回调函数 
        function(data, status) {
            console.info("Data: " + data + "\nStatus: " + status);
        }
    );
});
8.1.2.2、$.post() 方法

$.post() 方法通过 HTTP POST 请求从服务器上请求数据。

语法:

$.post(URL,data,callback);

参数:

  • URL 参数必需的,规定你希望加载的 URL。
  • data 可选的参数,规定与请求一同发送的查询字符串键/值对集合。
  • callback 可选的参数,是 load() 方法完成后所执行的函数名称。
$("button").click(function() {
    //使用jquery发送post请求
    $.post(
        //请求路径
        "http://localhost:8080/ajaxTest",
        //请求参数 --可以是js对象,也可以是字符串
        {
            name : "Donald Duck",
            city : "Duckburg"
        },
        //请求完毕后执行的回调函数
        function(data, status) {
            alert("Data: " + data + "\nStatus: " + status);
        }
    );
});
8.1.2.3、$.ajax()

ajax() 方法通过 HTTP 请求加载远程数据。
该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。
最简单的情况下,$.ajax() 可以不带任何参数直接使用。

语法

jQuery.ajax([settings])
参数 描述
settings 可选。用于配置 Ajax 请求的键值对集合。可以通过 $.ajaxSetup() 设置任何选项的默认值。

参数

  • options

    类型:Object

    可选。AJAX 请求设置。所有选项都是可选的。

  • async

    类型:Boolean

    默认值: true。默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。

    注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

  • beforeSend(XHR)

    类型:Function

    发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。

    XMLHttpRequest 对象是唯一的参数。

    这是一个 Ajax 事件。如果返回 false 可以取消本次 ajax 请求。

  • cache

    类型:Boolean

    默认值: true,dataType 为 script 和 jsonp 时默认为 false。设置为 false 将不缓存此页面。

    jQuery 1.2 新功能。

  • complete(XHR, TS)

    类型:Function

    请求完成后回调函数 (请求成功或失败之后均调用)。

    参数: XMLHttpRequest 对象和一个描述请求类型的字符串。

    这是一个 Ajax 事件。

  • contentType

    类型:String

    默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。

    默认值适合大多数情况。如果你明确地传递了一个 content-type 给 $.ajax() 那么它必定会发送给服务器(即使没有数据要发送)。

  • context

    类型:Object

    这个对象用于设置 Ajax 相关回调函数的上下文。也就是说,让回调函数内 this 指向这个对象(如果不设定这个参数,那么 this 就指向调用本次 AJAX 请求时传递的 options 参数)。比如指定一个 DOM 元素作为 context 参数,这样就设置了 success 回调函数的上下文为这个 DOM 元素。

    就像这样:

    $.ajax({ url: "test.html", context: document.body, success: function(){
        $(this).addClass("done");
    }});
    
  • data

    类型:String

    发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。

  • dataFilter

    类型:Function

    给 Ajax 返回的原始数据的进行预处理的函数。提供 data 和 type 两个参数:data 是 Ajax 返回的原始数据,type 是调用 jQuery.ajax 时提供的 dataType 参数。函数返回的值将由 jQuery 进一步处理。

  • dataType

    类型:String

    预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:

    • "xml": 返回 XML 文档,可用 jQuery 处理。
    • "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
    • "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
    • "json": 返回 JSON 数据 。
    • "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
    • "text": 返回纯文本字符串
  • error

    类型:Function

    默认值: 自动判断 (xml 或 html)。请求失败时调用此函数。

    有以下三个参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象。

    如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout", "error", "notmodified" 和 "parsererror"。

    这是一个 Ajax 事件。

  • global

    类型:Boolean

    是否触发全局 AJAX 事件。默认值: true。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 可用于控制不同的 Ajax 事件。

  • ifModified

    类型:Boolean

    仅在服务器数据改变时获取新数据。默认值: false。使用 HTTP 包 Last-Modified 头信息判断。在 jQuery 1.4 中,它也会检查服务器指定的 'etag' 来确定数据没有被修改过。

  • jsonp

    类型:String

    在一个 jsonp 请求中重写回调函数的名字。这个值用来替代在 "callback=?" 这种 GET 或 POST 请求中 URL 参数里的 "callback" 部分,比如 {jsonp:'onJsonPLoad'} 会导致将 "onJsonPLoad=?" 传给服务器。

  • jsonpCallback

    类型:String

    为 jsonp 请求指定一个回调函数名。这个值将用来取代 jQuery 自动生成的随机函数名。这主要用来让 jQuery 生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存 GET 请求的时候,指定这个回调函数名。

  • password

    类型:String

    用于响应 HTTP 访问认证请求的密码

  • processData

    类型:Boolean

    默认值: true。默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。

  • scriptCharset

    类型:String

    只有当请求时 dataType 为 "jsonp" 或 "script",并且 type 是 "GET" 才会用于强制修改 charset。通常只在本地和远程的内容编码不同时使用。

  • success

    类型:Function

    请求成功后的回调函数。

    参数:由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。

    这是一个 Ajax 事件。

  • traditional

    类型:Boolean

    如果你想要用传统的方式来序列化数据,那么就设置为 true。请参考工具分类下面的 jQuery.param 方法。

  • timeout

    类型:Number

    设置请求超时时间(毫秒)。此设置将覆盖全局设置。

  • type

    类型:String

    默认值: "GET")。请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。

  • url

    类型:String

    默认值: 当前页地址。发送请求的地址。

  • username

    类型:String

    用于响应 HTTP 访问认证请求的用户名。

  • xhr

    类型:Function

    需要返回一个 XMLHttpRequest 对象。默认在 IE 下是 ActiveXObject 而其他情况下是 XMLHttpRequest 。用于重写或者提供一个增强的 XMLHttpRequest 对象。这个参数在 jQuery 1.3 以前不可用。


回调函数

如果要处理 $.ajax() 得到的数据,则需要使用回调函数:beforeSend、error、dataFilter、success、complete。

beforeSend

在发送请求之前调用,并且传入一个 XMLHttpRequest 作为参数。

error

在请求出错时调用。传入 XMLHttpRequest 对象,描述错误类型的字符串以及一个异常对象(如果有的话)

dataFilter

在请求成功之后调用。传入返回的数据以及 "dataType" 参数的值。并且必须返回新的数据(可能是处理过的)传递给 success 回调函数。

success

当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。

complete

当请求完成之后调用这个函数,无论成功或失败。传入 XMLHttpRequest 对象,以及一个包含成功或错误代码的字符串

数据类型

通过 dataType 选项还可以指定其他不同数据处理方式。除了单纯的 XML,还可以指定 html、json、jsonp、script 或者 text。

其中,text 和 xml 类型返回的数据不会经过处理。数据仅仅简单的将 XMLHttpRequest 的 responseText 或 responseHTML 属性传递给 success 回调函数。


简单示例:

$.ajax(
    //options对象
    {
        //请求路径
        url:"http://localhost:8080/js/ajax-test.json",
        //请求方式
        type:"get",
        //请求参数
        data:{
            name:"张三"
        },
        //响应的数据类型
        dataType:"json",
        //请求出错时,将执行此回调函数
        error:function(){
            console.info("***请求出错啦....")
        },
        //请求出错时,将执行此回调函数
        success:function(respData){
            console.info("***请求成功啦,我们看看这个数据:",respData)
        }

    }
);

Copyright © 2024 夜雨初凉
Powered by .NET 9.0 on Kubernetes