资讯专栏INFORMATION COLUMN

jQuery 入门详解(二)

DevYK / 2583人阅读

摘要:相对论极大地改变了人类对宇宙和自然的常识性观念,提出了同时的相对性四维时空弯曲时空等全新的概念。狭义相对性原理是相对论的两个基本假定,在目前实验的观测下,物体的运动与相对论是吻合很好的,所以目前普遍认为相对论是正确的理论。

7. jQuery 里的事件机制
javascriptHTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的。jQuery不仅提供了更加优雅的事件处理语法,而且极大地增强了事件处理能力。
7.1 加载 DOM
前面章节我们已经对比了window.onload()$(document).ready()两种方法的区别。两种都是入口函数,只不过前者是js中的而后者是jQ中的。并且领着之间还是有区别的:

1、执行时机:

window.onload()方法是等到页面中所有元素加载完毕之后,才执行,即javascript此时才可以访问网页中的任何元素。而jQuery使用$(document).ready()方法,可以在DOM载入就绪时就对其进行操纵并调用执行它所绑定的函数。也就是说在jQ中,不需要等待所有图片加载完再执行。

但是就会有个问题,当获取图片宽高的时候,可能获取不到。不过jQ中多带带提出了一个页面加载的方法——load()方法,如果这个处理函数绑定给window对象则会在所有内容加载完毕之后触发。

$(window).load(function(){
   // 执行代码 
});

上面的代码,等同于js中的:

window.onload = function(){
    // 执行代码
}

2、多次使用:

javascript中入口函数只能写一次,如果写多个,下面会将上面的覆盖掉:

window.onload = function(){
    alert(123);
}

window.onload = function(){
    alert(456);             // 页面只会弹出 456
} 

jQuery中,入口函数可以写多次,不会出现覆盖的情况:

$(document).ready(function(){
   alert(123);          // 123               
});

$(document).ready(function(){
   alert(456);          // 456              
});

3、简写方式:
javascript中没有简写方式,但是在jQ中有简写方式:

// 1-原始版写法
$(document).ready(function(){
   // 执行代码 
});

// 2-简化写法,document可以省略
$().ready(function(){
   // 执行代码 
});

// 3-简化写法
$(function(){
    // 执行代码
});
7.2 事件绑定

1、什么是事件绑定

在文档装载完成之后,如果打算为元素绑定事件来完成某些操作,则可以使用bind()方法,bind()方法的调用格式为:
bind(type [, data] ,fn);

bind()方法有三个参数:

type:事件类型,类型包括:blur,focus,load,resize,scroll,unload,click,dbclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error等。

[,data]:可选参数,作为event.data属性值传递给事件对象的额外数据对象。

fn:用来绑定的处理函数。

示例代码: [ 38-jq事件机制-事件绑定.html ]


什么是相对论?

相对论是关于时空和引力的基本理论,主要由阿尔伯特·爱因斯坦创立,依据研究的对象不同分为狭义相对论和广义相对论。相对论的基本假设是相对性原理,即物理定律与参照系的选择无关。

狭义相对论和广义相对的区别是,前者讨论的是匀速直线运动的参照系(惯性参照系)之间的物理定律,后者则推广到具有加速度的参照系中(非惯性系),并在等效原理的假设下,广泛应用于引力场中。相对论极大地改变了人类对宇宙和自然的“常识性”观念,提出了“同时的相对性”、“四维时空”、“弯曲时空”等全新的概念。它发展了牛顿力学,推动物理学发展到一个新的高度。

狭义相对性原理是相对论的两个基本假定,在目前实验的观测下,物体的运动与相对论是吻合很好的,所以目前普遍认为相对论是正确的理论。

效果图:

注意:

is()方法,可以用来判断一个元素是否包含某一属性。

当一个选择器多次出现的时候,可以用一个变量将它缓存起来。

2、简写绑定事件

jQuery提供了一套简写的方法,简写的方法和bind()的使用方法类似,实现效果也相同,但是可以减少代码量:
$(function(){
    $("h2").click(function(){
       // 执行代码 
    });
});
7.3 合成事件
jQuery 有两个合成事件:hover()方法和toggle()方法(这里的toggle跟另一个方法toggle不是一个方法,这里的toggle方法因为重名的原因,已经在jQ1.8版本以后弃用了)。

1、hover()方法:

hover(enter,leaver); // enter 和 leaver 是两个函数

hover()方法用于模拟光标悬停事件。当光标移动到元素上的时候会触发第一个函数(enter),当光标离开元素的时候会触发第二个函数(leaver)。

示例代码: [ 39-jq事件机制-合成事件hover.html ]

$(function() {
    // hover 方法
    $("h2").hover(enter, leaver);
    var $content = $("h2").next();

    // 鼠标进入的时候触发的函数
    function enter() {
        $content.show();
    }

    // 鼠标离开时触发的函数
    function leaver() {
        $content.hide();
    }
});

2、toggle()方法:此方法自1.8版本以后,已弃用

toggle(fn1,fn2,...fnN);

toggle()方法,模拟的是鼠标单击事件,当点击第一次的时候,触发对应的第一个函数(fn1),当点击第二次的时候,触发对应的第二个函数(fn2),一直到最后一个函数的时候,再点击就会循环到第一个函数,就这样一直循环切换。

另外一个 toggle() 方法,是切换元素的可见状态,如果元素是可见的,事件触发之后,就会切换成不可见。

$("h2").click(function(){
    $(this).next().toggle(); // 如果元素一开始是隐藏的,点击之后就会切换成显示。
});
7.4 事件冒泡
在前面特效篇里面,我们已经介绍了什么是事件冒泡,这里不再累赘,简单来说,就是一个元素包含另一个元素,两个元素同时绑定了点击事件,当我点击里面元素的时候,会同时触发两个事件函数,这就是事件冒泡。

具体产生的原理,和解决办法请点击这个链接,这里会有处理兼容性的详细步骤。

示例代码: [ 40-jq事件机制-事件冒泡.html ]


提示信息

提示信息

提示信息

效果图:

我们可以看到,明明点击的是最里面的盒子,但是三个点击事件都同时触发了。

1、事件对象:

由于在IE-DOM和标准DOM实现事件对象的方法各不相同,所以需要处理兼容性。在jQuery中,已经将我们封装好了。 直接在触发事件函数里面传一个参数:
$("element").bind("click",function(event){
    // 执行代码
});

2、阻止事件冒泡:

阻止事件的方法存也在兼容性,同样的jQ中已经封装好,直接使用stopPropagation()方法来阻止事件冒泡。

示例代码: [ 41-jq事件机制-阻止事件冒泡.html ]

$(function() {
    $(".box").click(function(e) {                   // 事件对象
        $(this).children("p").text(".box被触发了");
        e.stopPropagation();                        // 阻止事件冒泡
    });
    $(".box1").click(function(e) {
        $(this).children("p").text(".box1被触发了");
        e.stopPropagation();

    });
    $(".box2").click(function(e) {
        $(this).children("p").text(".box2被触发了");
        e.stopPropagation();
    });
});

效果图:

3、阻止默认行为:

网页中有很多元素都有默认行为,例如,单击超链接后会跳转、单击提交按钮后表单会提交,有时候我们需要阻止元素的默认行为。

jQ中提供了一个方法来阻止元素的默认行为:preventDefault

不加阻止默认行为时的效果:

示例代码: [ 42-jq事件机制-阻止默认行为.html ]



效果图:

4、return false:

如果想要同时对事件停止冒泡和阻止默认行为,可以有一种默认的简写方式:return false

5、事件捕获:

jQ中不支持事件捕获,如果想要事件捕获的话,请参考原生的js
7.5 事件对象的属性

1、event.type:

该方法可以获取到事件的类型。
$("a").click(function(event){
    console.log(event.type);    // 打印a标签点击之后的事件类型  打印 ==> click
    return false;           // 阻止a标签默认跳转事件
});

2、event.stopPropagation()方法:

上面已经提过了,该方法是阻止事件冒泡。

3、event.preventDefault()方法:

上面已经提过了,该方法是阻止事件默认行为。

4、event.target:

该方法的作用是获取到触发事件的元素。
$("a").click(function(event){
    console.log(event.target);    // 打印 ==> a
    return false;                 // 阻止a标签默认跳转事件
});

5、event.pageX 和 event.pageY:

该方法的作用,是分别获取到光标相对于页面的x坐标和y坐标,如果页面上有滚动条的话,还要加上滚动条的宽度和高度。

6、event.which

该方法的作用是在鼠标单击事件中获取到鼠标的左、中、右键;在键盘事件中获取键盘的按键。

比如获取鼠标的按键:

$("a").mousedown(function(event){
    console.log(event.which);     // 鼠标左键==> 1 鼠标中键==> 2 鼠标右键==> 3 
    return false;                 // 阻止a标签默认跳转事件
});

比如获取键盘的按键:

$("input[text]").keyup(function(event){
    console.log(event.which);     // 对应按下的键盘码
});

7、event.metaKey:

该方法是针对不同浏览器,获取到按键。
7.6 移除事件
当我们想要移除一个事件的时候,可以使用unbind()方法。
unbind([type].[data]);

第一个参数是事件类型,第二个参数是将要移除的函数:

如果没有参数,直接删除所有的绑定的事件;

如果提供了事件类型作为参数,那只删除该类型的绑定事件;

如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除。

示例代码: [ 43-jq事件机制-移除事件.html ]




效果图:

7.7 模拟操作
什么是模拟操作呢?我们可以看到前面的单击事件,都需要手动去触发,模拟操作就是可以自动触发click,而不需要用户主动点击。




一进入页面就会自动弹出“呵呵”,其中 $("#btn").click();,也可以达到同样的效果。

trigger()方法触发事件后,会执行浏览器默认操作:

$("input").trigger("focus");

上面的代码不仅会触发元素绑定的focus事件,也会使input元素本身得到焦点(这就是浏览器的默认操作)。

triggerHandler()方法:

如果你只想触发绑定的focus事件,而不想执行浏览器默认操作,可以使用triggerHandler()方法。
$("input").triggerHandler("focus");
7.8 事件委托
事件委托,首先按字面的意思就能看出来,是将事件交由别人来执行,再联想到事件冒泡,是不是想到了?对,就是将子元素的事件通过冒泡的形式交由父元素来执行。

举个例子:

假如想要给多个li都注册点击事件,只需要给li循环遍历,再添加点击事件,这种方法固然简单,但是假如有100个、1000li的时候,这里的DOM操无形之中就繁琐了。并且当我们动态添加li元素的时候,这些li是没有点击事件的。但是这些只要讲点击事件交给父元素来执行,就能实现了。

1、on + 注册事件:

除了bind方法绑定事件之外,在jQuery1.7版本之后,新添了一种方法:on()方法用来绑定事件,off()方法用来解除绑定事件。on()方法既可以注册事件,还可以注册委托事件。
$(element).on(type,[selector],fn);

参数详解:

type:字符串,事件类型,如:clickmouseover...;

selector:可选,字符串,用于过滤出被选中的元素中能触发事件的后代元素。如果选择器是 null 或者忽略了该选择器,那么被选中的元素总是能触发事件;

fn:事件被触发执行的函数。

示例代码:


111111

111111

111111

111111

123456

效果图:

第二个参数其实就相当于一个过滤器的作用,给div里面的p注册委托事件。在执行顺序上,会先执行元素自己的事件,再去执行绑定的事件,最后执行父元素的事件。

当第二个参数传进去的时候,就想当于给过滤的元素注册委托事件

2、delegate 注册委托事件:

delegate只能注册委托事件。
$(fatheElement).delegate(selector,type,fn);

参数详解:

fatheElement:父元素;

selector:可选,字符串,用于过滤出被选中的元素中能触发事件的后代元素。如果选择器是 null 或者忽略了该选择器,那么被选中的元素总是能触发事件;

type:事件类型;

fn:事件被触发执行的函数。

7.9 其他用法

1、绑定多个事件类型:

$("div").bind("mouseover mouseout",function(){
   $(this).toggleClass("over");  // 当鼠标进入的时候,该元素的class属性切换为over 鼠标离开时class切换为先前的值
});

2、添加事件的命名空间:

$("div").bind("click.plugin",function(){
   alert(123); 
});

$("div").bind("mouseover.plugin",function(){
   alert(456); 
});

$("div").bind("dbclick",function(){
   alert(666); 
});

$("button").click(function(){
    $("div").unbind(".plugin"); 
});

其中.plugin就是命名空间,当点击button按钮的时候,就删除了事件的命名空间.plugin,此时对应的事件也会被移除。

相同的事件,不同的命名空间:

$("div").bind("click.plugin",function(){
   alert(456); 
});

$("div").bind("click",function(){
   alert(666); 
});

$("button").click(function(){
    $("div").trigger("click!");  // 注意后面的感叹号
});

当点击div的时候,会同时触发click.pluginclick事件,如果点击button只会触发click事件,而不会触发click.plugin事件。trigger("click!"),后面感叹号表示的是匹配所有不在命名空间中的click方法。

8. jQuery 动画
相对于原生jsjQuery中的动画更加的方便,更加的强大。
8.1 show()方法 和 hide()方法
当一个元素调用show()方法的时候,会将该元素的display设置为block,当调用hide()方法的时候,会将该元素的display设置为none
$("h2").bind("mouseover",function(){
    $(this).next().show();  // 鼠标进入的时候 h2 下一个兄弟元素显示
}).bind("mouseout",function(){
    $(this).next().hide();  // 鼠标离开的时候 h2 下一个兄弟元素隐藏
})

此时还没有动画的效果,下面给他们加上动画效果

下面的代码表示的是,元素在600ms内显示出来:

$("element").show(600);

下面的代码表示的是,元素在300ms内隐藏起来:

$("element").hide(300);

示例代码: [ 45-jq动画-show&hide.html ]





鼠标经过&离开

相对论是关于时空和引力的基本理论,主要由阿尔伯特·爱因斯坦创立,依据研究的对象不同分为狭义相对论和广义相对论。相对论的基本假设是相对性原理,即物理定律与参照系的选择无关。

效果图:

我们可以看到,不管是show还是hide的时候,元素的不透明度都是在慢慢增加或者减小的。

8.2 fadeIn()方法 和 fadeOut()方法
showhide方法不同的是,fadeInfadeOut方法只改变元素的不透明度,不会去改变宽高。

下面的代码表示的是元素淡入的效果,其中也可以传时间:

$("element").fadeIn();

下面的代码表示的是元素淡出的效果:

$("element").fadeOut();

示例代码: [ 46-jq动画-fadeIn&fadeOut.html ]

 $(function() {
    $("h4").bind("mouseover", function() {
        $(this).next().fadeIn();
    }).bind("mouseout", function() {
        $(this).next().fadeOut();
    });
});

效果图:

8.3 slideUp()方法 和 slideDown()方法
slideUp()方法和slideDown()方法只会改变元素的高度,如果一个元素的display属性值为“none”,调用slideDown()方法的时候元素由上至下延伸显示。slideUp()正好相反,元素将由下到上缩短隐藏。

示例代码: [ 47-jq动画-slideDown&slideUp.html ]

 $(function() {
    $("h4").bind("mouseover", function() {
        $(this).next().slideDown();
    }).bind("mouseout", function() {
        $(this).next().slideUp();
    });
});

效果图:

8.4 自定义动画方法 animate()
前面几种类型动画,比较单一,很多时候不能满足于用户的需求,但是在jQ中还有一个自定义动画animate,非常强大。
animate(params,speed,easing,callback);

参数说明如下:

params:一个包含样式和值的对象,比如{p1:"val1",p2:"val2",...}

speed:动画执行速度(可选),默认400

easing:表示过度使用哪种缓动函数(默认swingjQ内部还支持一个linear)

callback:在动画执行完之后,执行的函数(可选)。

1、简单的动画:





效果图:

2、累加、累减动画:

通过累加一个值让元素从当前位置,累加到900的位置
$("#box2").animate({
    left: "+=900" // 在当前位置累加到 900
}, 1000);

3、多重动画:

同时执行多个动画

$("#box3").click(function() {
    $(this).animate({
        left: "300",
        height: "200px",
        width: "200px",
        top: "200px"
    }, 2000);
});

效果图:

我们可以看到所有的变化都是同时进行的。

按顺序执行多个动画

$("#box4").click(function() {
    $(this).animate({
        left: "400px",
        height: "150px",
        opacity: "1"
    }, 3000).animate({
        top: "150px",
        width: "150px"
    }, 3000).fadeOut("slow");
});

效果图:

4、延迟动画:

在动画执行中如果想要对某一段动画进行延迟操作,可以使用delay()方法。
$("#box5").click(function() {
    $(this).animate({
        left: "400px",
        height: "150px",
        opacity: "1"
    }, 3000)
    .delay(1000)
    .animate({
        top: "150px",
        width: "150px"
    }, 3000).fadeOut("slow");
});

效果图:

5、动画队列:

一组元素上的效果:

当在一个animate()方法中应用多个属性时,动画是同时发生的;

当以链式的写法应用到动画方法时,动画是按照顺序发生的。

多组元素上的动画:

默认情况下,几组动画是同时发生的;

当以回调形式应用动画方式时,动画按照回调顺序发生的。

6、停止动画:

如果需要在某处停止动画需要使用stop()方法。
stop([clearQueue],[gotoEnd]);

两个参数都是可选的,都为布尔值,clearQueue表示是否要清空未执行完的动画队列。gotoEnd表示的是直接将正在执行的动画跳转到末状态。直接使用stop()方法,则会立即停止当前正在执行的动画。

不明白的小伙伴,参考8.6小节,第二个案例 《动画下拉菜单栏》

8.5 其他动画方法

1、toggle()方法:

toggle()方法可以切换元素的可见状态,如果元素是可见的,则切换为隐藏。如果元素是隐藏的,则切换为可见。
$("#btn1").click(function() {
    $(this).next().toggle();
});

效果图:

只要循环点击h4,它的下一个兄弟元素就会循环切换。

2、slideToggle()方法:

通过高度变化来切换匹配元素的可见性。
$("#btn2").click(function() {
    $(this).next().slideToggle();
});

效果图:

3、fadeTo()方法:

fadeTo()方法可以将不透明度设置到指定的值。
$("#btn3").click(function() {
    $(this).next().fadeTo(600, 0.5);  // 600表示的是执行时间 0.5 表示目标值
});

效果图:

4、fadeToggle()方法:

fadeToggle()方法可以切换不透明度。
$("#btn4").click(function() {
    $(this).next().fadeToggle();
});

效果图:

8.6 jQuery 动画案例
下面通过几个简单的例子,巩固一下jQuery动画的知识。

1、呼吸灯版轮播图:

在实现原理上,与前面特效篇的是不同的,这里改变的是图片的不透明度opacity,并且不需要让所有li左浮动,ul也不需要设置一个很宽的宽度。在jQ中操作更加的简单。

样式上:

大盒子相对定位,图片的li绝对定位,让所有的图片叠加在一起;

给所有的图片li设置隐藏属性,第一张图片需要显示;

js上:

定义一个index用来记录当前点击的张数;

当点击右箭头的时候,让对应的图片lifadeIn,其余的兄弟元素fadeOut,同时让对应的小圆点添加current类,其余的兄弟元素移除这个类;

点击左箭头只需将index--,再进行判断一下,其他的与点击右箭头原理是一样的。

示例代码: [ 50-jq动画-案例-呼吸灯版轮播图.html ]





< >

效果图:

2、动画下拉菜单栏:

动画下拉菜单栏,主要实现原理还是运用jQ里面的两个动画slideDownslideUp,并且配合stop方法

先看一下,如果不加stop()方法,会是一个什么效果:

我们可以看到一个效果,当光标移到第一个“一级菜单”的时候,触发动画效果,但是动画效果还没结束,我就将光标移进了第二个菜单,触发第二个菜单下拉效果。所以导致了动画效果与光标不一致,此时只需要在光标移入、移出之前加上stop()方法,就能解决这个问题。

stop()方法会结束当前正在进行的动画效果,并立即执行队列中的下一个动画。

示例代码: [ 51-jq动画-案例-动画下拉菜单.html ]





效果图:

3、手风琴:

实现原理:

给外部大盒子设置一个与图片大小一致的宽高,并且设置相对定位

还是采用ul,li结构,li设置宽高,与图片大小一致,设置绝对定

动态的给li添加背景图片,因为li绝对定位的原因,此时所有的li都叠在一起

动态的给每个li设置left值(left*i),这时候li就会依次排开

大盒子还要设置一个overflow-hidden属性,将多余的隐藏掉

给每个li注册鼠标鼠标经过事件,然后根据下面推算出的规律(当前鼠标经过的索引index,他之前包括他自己的left值都是,设定的最小值乘以对应的索引。而他后面的会将设定的最小值乘以对应的索引后再加上450,这里的450不是一个固定值,根据规律找出来的)进行判断,设置各自的left值;

鼠标离开的时候再让所有的盒子恢复到一开始的位置,每个li显示等分的宽度

大盒子没有overflow-hidden的时候:

画个图,理解一下:

找规律:

结合上面的图片,我们可以找到一个规律

当鼠标在第1个li上的时候,li下标index为0:

index:0 left:0

index:1 left:500px

index:2 left:550px

index:3 left:600px

index:4 left:650px

当鼠标在第2个li上的时候,li下标index为1:

index:0 left:0

index:1 left:50px

index:2 left:550px

index:3 left:600px

index:4 left:650px

当鼠标在第3个li上的时候,li下标index为2:

index:0 left:0

index:1 left:50px

index:2 left:100px

index:3 left:600px

index:4 left:650px

看出规律了吗?

当对应li的下标<=鼠标悬停的的下标上的时候left值 是50*i

当对应li的下标>鼠标悬停的的下标上的时候left值 是50*i + ,450(450不是固定的值,是经过计算出来的)

示例代码: [ 52-jq动画-案例-手风琴.html ]





效果图:

4、弹幕效果:

获取输入框的的 value 值;并生成 span 标签

span 标签添加到 页面中,随机颜色 随机高度 span动画从右向左

到达最左边的时候删除 span 标签(不删除会随着输入的内容越来越多影响性能)

示例代码: [ 53-jq动画-案例-弹幕效果.html ]


吐槽

效果图:

9. jQuery 里的 Ajax 操作
Ajax全称“Asynchronous JavaScript and XML”(异步的JavaScriptXML)。它的出现揭开了无刷新更新页面的新时代。具体的实现方式以及Ajax的优缺点,在前面的一篇文章[《js 进阶知识-Ajax篇》]()已经讲得很详细了,不明白的小伙伴,可以先去学习下原生js是如何实现Ajax的。

jQueryAjax操作进行了封装,在jQuery$.ajax()方法属于最底层的方法,第2层是load()$.get()$.post()方法,第3层就是$.getScript()$.getJSON()方法。

9.1 load()方法

1、载入HTML文档

load()方法是jQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中。它的结构为:
load(url[,data][,callback]);

参数详解:

参数名称 类型 说明
url String 请求HTML页面的URL地址
data(可选) Object 发送至服务器的key/value数据
callback(可选) Function 请求完成时的回调函数,无论请求成功还是失败

示例代码:

首先新建一个data.html的文件,里面模拟的是请求的数据:

张三:

哈哈哈,真有趣

李四:

顶楼上

王五:

66666

再创建一个主页面,index.html






已有评论:

效果图:

上面的例子可以看出来,开发人员只需要使用jQuery选择器为HTML片段指定目标位置,然后将要加载的文件URL作为参数传递给load()方法即可。我们可以发现原本的data页面是没有为类comment设置样式的,但是主页面加载后同样的样式名会立即应用到新加载的内容上。

2、筛选载入的HTML文档

上面的案例我们可以看到,点击之后data.html里面的整个内容都被加载进来了。如果需要加载data.html页面里的某些元素的时候该怎么办呢?我们可以使用load()方法的URL参数来达到目的。只需要指定选择符就ok了。

示例代码:

// 选择加载data.html页面中class为“para”的内容,注意中间有一个空格
$(".resText").load("data.html .para");

效果图:

我们可以看到,只有类名是“para”的被加载了。

3、传递方式:

load()方法的传递方式根据参数data来自动指定。如果没有参数传递,则采用GET方式传递;反之则会自动转换为POST方式:
// 1- 无data参数传递的时候,则是GET方式
$(".resText").load("data.php",function(){});

// 2- 有data参数传递的时候,则是POST方式
$(".resText").load("data.php",{name:"Levi",age:"18"},function(){});

4、回调函数:

回调函数是在页面加载完成之后执行的操作,该函数有三个参数,分别是请求返回的内容、请求状态、XMLHttpRequest对象:
$(".resText").load("data.php",function(responseText,textStatus,XMLHttpRequest){
    // responseText : 请求返回的内容
    // textStatus:请求状态:success、error、notmodified、timeout 4种
    // XMLHttpRequest :XMLHttpRequest对象
});

load()方法中,无论Ajax请求是否成功,只要当请求完成之后,回调函数都会执行。

9.2 $.get()方法和$.post()方法
load()方法通常是用来从WEB服务器上获取静态的数据的,如果需要向服务器传递参数的话,可以使用$.get()方法和$.post()方法还有后面的$.ajax方法。

1、$.get()方法

$.get()方法使用GET方式来进行异步请求:
$.get(url [,data] [,callback] [,type]);

参数详解:

参数名称 类型 说明
url String 请求HTML页面的URL地址
data(可选) Object 发送至服务器的key/value数据,会作为字符串凭接在url的后面
callback(可选) Function 请求完成时的回调函数(只有当Response的返回状态是success的时候,才调用该函数)
type (可选) String 服务器返回内容的格式,包括xml、html、script、json、text、_default

回调函数:

$.get()方法的回调函数只有两个参数:
$.get("get.php",{useraname: "Levi",age:18},function(data,textStatus){
    // data 返回的内容,可以是XML文档、JSON文件、HTML片段等的
    // textStatus 请求状态:success、error、notmodified、timeout 4种。
})

data参数代表请求返回的内容,textStatus参数代表请求回来的状态,注意:只有当数据成功返回success后才被调用。

2、$.post()方法

它与$.get()方法的结构和使用方式都相同,不过他们之间仍有以下区别:

get请求会将参数跟在URL的后面进行传递,而post请求则是作为HTTP消息的实体内容发送给Web服务器;

get对传输的数据大小有限制(通常不大于2KB),而使用post方式传递数据量要比get方式大得多;

get方式请求的数据会被浏览器缓存起来,因此可以通过浏览器的历史记录中读到这些数据,存在安全性问题。

9.3 $.ajax()方法
$.ajax()方式常用参数解析:
方法 作用
url 请求的地址
type 请求的方式
dataType 告诉jQuery,需要按照什么格式对服务器返回的数据进行解析,默认json
data 数据
success 请求成功的回调函数
error 请求失败的回调函数
beforeSend 请求发送之前调用的函数
complete 不论请求是成功还是失败的,只要请求完成就会调用
timeout 设置请求超时时间

示例代码:

$.ajax({
    // 请求的地址
    url: "04-data.php",
    // 请求的方式
    type: "get",
    // 告诉jQuery,需要按照什么格式对服务器返回的数据进行解析,默认json
    dataType: "json",
    // 数据
    data: {
        msg: "我是来请求数据的"
    },
    // 请求成功的回调函数
    success: function(data) {
        console.log(data);
    },
    // 请求失败的回调函数
    error: function() {
        console.log("失败了");
    },
    // 请求发送之前调用的函数
    beforeSend: function() {
        console.log("请求发送之前调用的函数");
        // 如果返回一个false,那么就会阻止整个请求的发送
        // return false;
        // 用法:可以用作表单验证,当表单内容符合规范的时候发送ajax请求,当不符合的时候就不发送ajax请求
    },
    // 不论请求是成功还是失败的,只要请求完成就会调用
    complete: function() {
        console.log("请求完成了");
    },
    // 设置请求超时时间(单位:ms),超过这个时间后,就不会请求了
    timeout:2000
});
9.3 jQuery中的serialize和serializeArray方法

1、jQuery中的serialize方法:

serialize方法会将表单中所有的内容拼接成key=value&key=value这样的字符串。

通过这种方式就不要再去手动获取表单中的内容的

2、jQuery中的serializeArray方法:

上面的方法我们可以看到,获取整个数据的时候,是很简单,但是想要进行校验的话就很难,因为上面的方法获取的是一个字符串,不能进行校验,所以此时我们需要另外一个方法,jQuery中的serializeArray方法。

示例代码:ajax模拟表单校验及注册





    
    sing in page
    



    

用户名不能为空

阅读需要支付1元查看
<