Ajax - 异步原理及Js/Jquery两种使用方式

Posted 大数据和人工智能技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax - 异步原理及Js/Jquery两种使用方式相关的知识,希望对你有一定的参考价值。

AJAXAsynchronous javascript And XML,异步JavaScriptXML),是一种用于创建快速动态网页的技术。从名字可以发现,Ajax并不是一种全新的技术,而是整合了JavaScriptXML等现有技术。

1.Ajax的作用 

  Ajax 通过在后台与服务器之间交换少量数据的方式,实现网页的异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的局部内容进行更新,例如:我们在网页中观看电影时,如果点击了左下角的“赞”图标,那么“赞”的数量会从5353增加到5354(即局部内容进行了更新),而当前网页并不会被刷新,如图所示。

  网页中的视频

而传统的网页(不使用 AJAX)如果需要更新内容,就必须重新加载整个网页。试想如果点击一下“赞”网页就刷新、视频就得从头开始看,肯定是非常不方便的。

AJAX的应用非常广泛,再如当我们在百度搜索框输入内容时,搜索框会自动查询并显示列表,但搜索框以外的网页不会发生变化,如图所示。

Ajax - 异步原理及Js/Jquery两种使用方式

 百度搜索框

还有百度地图、微博等,都大量使用到了AJAX技术。


2.使用JavaScript实现Ajax  

      使用JavaScript来实现Ajax,主要是借助XMLHttpRequest对象向服务器发送请求,并获取返回结果。

2.1XMLHttpRequest对象的常用方法  

(1) open(methodName,URL,isAsync)

(2) send(content)

发送HTTP请求。content是可选项,用来指定请求参数,将请求参数作为请求体的一部分一起发送给服务器。通常只在POST方式下才使用content参数GET请求方式不携带请求体)。

(3) setRequestHeader(header,value)

HTTP请求头中设置key/value对:①若为GET请求方式:则不用设置;②若为POST方式,a.当请求中包含文件上传元素时,设置为:

XMLHttpRequest.setRequestHeader("Content-Type", "mulipart/form-data");

b.当请求中不包含文件上传元素时,设置为:

XMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");


2.2XMLHttpRequest对象的常用属性  

(1)readystate

readystate表示XMLHttpRequest 对象发送的HTTP请求状态,共有五种状态,如表所示。

Ajax - 异步原理及Js/Jquery两种使用方式

(2) status

status 表示HTTP响应中的状态码,各状态码的含义如表所示。

状态

200

服务器正常响应

400

无法找到请求的资源

403

没有访问权限

404

访问的资源不存在

500

服务器内部错误,很可能是服务器代码有错

 HTTP响应状态码

可以发现,只有当状态码为200才表示响应成功;否则,说明HTTP响应不正常。

 (3) onreadystatechange

指定XMLHttpRequest对象的回调函数。每当readyState属性值改变时,此回调函数就会被调用一次。

(4) responseText

从服务器端返回的string格式的响应内容。

(5) responseXML

从服务器端返回的XML格式的数据,可以直接被当作DOM对象使用。


2.3使用Ajax实现异步请求  

使用JavaScript实现Ajax,分为POSTGET两种方式,但大体的步骤都相同,如下:

     ①创建XMLHttpRequest对象,即创建一个异步调用对象.

     ②设置并编写回调函数

     ③初始化XMLHttpRequest对象的参数值(若是POST方式,还需要设置“请求头”)

     ④发送HTTP请求

再在回调函数中编写: 

     ⑤获取异步调用返回的数据

     ⑥使用JavaScriptJquery等实现局部刷新

示例:

很多手机软件、网站都会要求我们绑定手机号码,并且一个手机号码只能绑定一个账号。因此,我们在绑定手机号码之前,程序会先检验此号码是否已经被绑定:若已经被绑定,则提示“此号码已经被绑定,请尝试其他号码”;否则提示“绑定成功”。 现在我们就用Ajax作为前端技术,来实现此功能。

(1)采用POST方式

服务器端MobileServlet.java

Ajax - 异步原理及Js/Jquery两种使用方式


客户端index.jsp

Ajax - 异步原理及Js/Jquery两种使用方式

可以发现,服务器端是通过PrintWriter对象out,将结果以字符串的形式,传递给客户端;而客户端通过XMLHttpRequest对象的responseText属性,来获取该结果;此外,客户端中responseText属性的返回值是string类型,所以在服务器端也应该传递String类型的结果。

运行结果:

①输入已存在的号码18888888888,如图所示。

Ajax - 异步原理及Js/Jquery两种使用方式

  输入已存在的号码

②输入暂不存在的号码,如图所示。

Ajax - 异步原理及Js/Jquery两种使用方式

 输入不存在的号码

Ajax - 异步原理及Js/Jquery两种使用方式

 输入格式错误的号码

(2)采用GET方式

如果将上例改为GET方式的Ajax,则只需要做四处更改,具体如下:

①将XMLHttpRequest对象的open()方法中的method参数值改为”get”

③删除设置XMLHttpRequest对象头信息的代码

④将XMLHttpRequest对象的send(data)方法中的data,改为null(即将data的值,转移到了send()方法的url参数中)。

可以发现,将POST方式改为GET方式后,把需要发送的参数从send()方法转移到open方法中的url参数中,并且不需要再设置头信息。

具体如代码下:

服务器端MobileServlet.java

 与POST方式完全相同

客户端index_get.jsp

   与POST方式的不同之处如下:

Ajax - 异步原理及Js/Jquery两种使用方式

读者可以结合POST方式(index.jsp)和GET方式(index_get.jsp)中的源代码,仔细对比。


4.使用JQuery实现Ajax 

除了使用JavaScript以外,我们还可以使用JQuery来实现Ajax,而且更加简洁、方便。JQuery方式的Ajax,主要是通过JQuery提供$.ajax()$.get()$.post()load()等方法来实现的。

4.1$.ajax()方法

语法:

Ajax - 异步原理及Js/Jquery两种使用方式

基本格式是:所有参数写在$.ajax({…})中,不同参数之间用逗号隔开,每个参数以“参数名:参数值”的方式书写。

本质就是将JavaScriptXMLHttpRequest的属性和方法,以参数化的形式集中管理,如表所示。

Ajax - 异步原理及Js/Jquery两种使用方式

除了表中介绍的以外,还有cacheasyncbeforeSendcompletecontentType等其他参数,读者可以访问http://www.w3school.com.cn/jquery/ajax_ajax.asp进行学习。

现在用jQuery提供的$.ajax()方法,来实现“检测手机号码是否已绑定”的客户端函数(服务器端及客户端其他代码,与之前的完全一致):


客户端jQuery_ajax.jsp

Ajax - 异步原理及Js/Jquery两种使用方式

运行结果与之前的完全相同。


4.2$.get()方法

$.get(…)方法指定以GET方式发送请求,与$.ajax({})方法在语法上的区别是:①参数值必须按照一定的顺序书写;②省略了参数名、type参数、以及error()函数;$.ajax({})的各个参数是用大括号{}括起来的,而$.get(…)没有大括号。

语法(各参数顺序不可变):

Ajax - 异步原理及Js/Jquery两种使用方式

即,等价于:

Ajax - 异步原理及Js/Jquery两种使用方式

4.3$.post()方法  

$.get()方法指定以POST方式发送请求,也是将参数值按照一定的顺序书写。

语法(各参数顺序不可变):

Ajax - 异步原理及Js/Jquery两种使用方式

即语法上,只是将方法名$.get()变为了$.post(),其他语法完全一致。

4.4$(selector).load ()方法  

$(selector).load ()方法是在$.get()(或$.post())方法的基础上进一步优化,不但会发送请求,还会将响应的数据放入指定的元素。其中$(selector)是指jQuery选择器指定的元素。

语法:

Ajax - 异步原理及Js/Jquery两种使用方式

因为load()方法会直接将响应结果放入指定元素,所以通常可以省略load()中的function()函数。

我们再用load()方法,实现一下“检测手机号码是否已绑定”:

服务器端jQuery_load.jsp

MobileLoadServlet.java

Ajax - 异步原理及Js/Jquery两种使用方式

仔细观察,客户端用load()方法时,服务器端直接将结果字符串返回。

客户端jQuery_load.jsp

运行结果仍然与之前的完全一样。


热门文章:





以上是关于Ajax - 异步原理及Js/Jquery两种使用方式的主要内容,如果未能解决你的问题,请参考以下文章

AJAX原理及使用

ajax的原理及应用

ajax原理及使用

用SpringMVC和Jquery的Ajax进行异步提交表单

AJAX基础知识及核心原理解读

浅析ajax原理与用法