Ajax入门

旧城冷巷雨未停 提交于 2020-04-07 23:12:17

一.jQuery复习

1.jQuery介绍

2.jQuery下载与安装 

 

在eclipse中使用js文件

编写好html页面,启动tomcat即可在浏览器中显示使用了jQuery的页面.

3. jQuery选择器

 web页面开发的两个要素:

  -选择html页面上的哪些元素

  -在这些元素上做哪些动作

jQuery选择器:

  -定义:用于选中需要操作的页面元素

  -语法1:jQuery(选择器表达式)

  -语法2:$(选择器表达式)

1)基本选择器

是jQuery最基础也是最常用的选择器表达式

 2)层叠选择器

根据元素的位置关系来获取元素的选择器表达式

 3)属性选择器

根据元素的属性值来选择元素的选择器表达式 

 4)位置选择器

通过位置获取指定的元素,例如"获取第3个元素"

 5)表单选择器

是获取表单元素的简化形式,例如:获取所有的文本框.

4.操作元素属性

  1)attr(name|properties|key) - 获取或设置元素属性

   传递一个参数的时候表示获取,传递两个参数的时候表示设置.

  $("a[href*='163']").attr("href");

  $("a[href*='163']").attr("href","http://www.163.com");

  获取多个元素的某一个属性,会返回第一个符合要求的属性值

  设置多个元素的某一个属性的时候,将所有选中元素的属性值进行赋值

  2)removeAttr(name) - 移除元素属性

   $("a").removeAttr("href");

5.操作元素的CSS样式

  1)css() - 获取或设置匹配元素的样式属性 

  $("a").css("color");

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

  这种方法一次只能设置一个属性,jQuery为我们提供了一种简化的方式

  在css方法中增加json表达式

  $("a").css({"color":"red","font-weight":"bold","font-style":"italic"});

  2)addClass() - 为每个匹配的元素添加指定的类名

  添加多个类,类名之间用空格隔开

  $("li").addClass("hightlight myclass");

  3)removeClass() - 从所有匹配的元素中删除全部或者指定的类

  $("p").removeClass("hightlight");

6. 设置元素内容

   1)val() - 获取或设置输入项的值

  $("input[name='uname']").val("adminisitrator");

  

  不写参数表示获取

  $("input[name='uname']").val();

  2)text() - 获取或设置元素的纯文本

  $("span.myclass").text("锄禾日当午,汗滴禾下土");

  

  标签不会解释

  $("span.myclass").text("<b>锄禾日当午,汗滴禾下土</b>");

  页面显示:<b>锄禾日当午,汗滴禾下土</b>

  3)html() - 获取或设置元素内部的html

  $("span.myclass").html("<b>锄禾日当午,汗滴禾下土</b>");

  页面显示加粗后的文字

  设置:text()和html()最大的区别在于对于文本中的html标签是否进行转义

  获取:不传参数即为获取.text会忽略标签直接获取内部文本.

  $("span.myclass").html();

  如果没有特殊情况,一般都采用text方法来获取和设置标签.

7.jQuery事件处理方法

  on("click",function) - 为选中的页面属性绑定单击事件

  click(function) - 是绑定事件的简写形式

  处理方法中提供了event参数包含了事件的相关信息

  jQuery常用事件

   

  

    点击选中元素,则会将该元素背景变为黄色

  

     on的两个参数:事件名,事件触发时的函数

   click简写形式:

   

   案例:输入空格时,输入框中文本变为红色

   event参数

   

   浏览器控制台可以看到详细的参数

    -keycode 键盘按键的代码

  

8.页面就绪函数

      

二.Ajax入门

1.Ajax介绍

  如果每次页面修改都要刷新整个页面,非常不方便,用户体验也很差.

ajax就可以在不刷新页面的情况下与后台数据进行交互,从而实现页面的局部刷新.

2.Ajax的使用流程

1)创建XmlHttpRequest对象

  

2)发送Ajax请求

   true异步,false同步

3)处理服务器响应

 案例:要求,当点击加载按钮时,将服务器返回的内容添加到div中

如果在这里使用console能在控制台打印出xmlhttp对象的内容,说明XmlHttpRequest对象创建成功 

 发布工程,启动tomcat,浏览器访问servlet

 浏览器访问index.html

点击加载按钮 

注意:如果前面时ajax进行请求发送,那么在servlet中就不再进行任何页面的跳转,而是直接返回要产生的信息或用户需要的数据(一般是json格式).

3.利用Ajax实现新闻列表

 创建一个新闻类,添加get,set方法,有参构造和无参构造

  一个新闻servlet,为了处理json的序列化和反序列化,提前在工程lib目录中引入fastjson的jar包,这里的JSON是fastjson为java提供的java对象

  

  启动tomcat访问servlet,可以看到所有新闻list都被序列化成了json字符串  

       

         一个news.html

  用于显示服务器返回内容

  

   这里的JSON对象,是js提供的内置对象

    

        

        启动tomcat,访问news.html

  

  几点注意:

  在servlet中,无论原始数据类型是list,set还是hasmap,对外进行字符串序列化的时候,一律将其转换为json

  通过回传json能够对我们的数据进行有效的描述,同时在我们的客户端(web页面)中通过ajax的方式将所

  传递的字符串转换为json对象,在页面中循环输出 

同步与异步的区别?

send方法在发送请求的过程中需要时间,网络传输发送到服务器,服务器处理再返回响应的过程也需要时间.

异步和同步决定了在发生过程中,程序是否继续向下执行. 

 将当前线程沉睡五秒钟

 

  启动tomcat. 访问news.html

刷新之后,控制台不会有任何输出,过了几秒之后,控制台打印"请求发送完成",同时页面中的内容也不见了

这就是我们设置同步所造成的结果,

如果请求在5秒中没有返回结果,send方法就一直卡着,处于阻塞状态,等待五秒,直到数据返回之后,才继续向下执行代码,输出 "请求发送完成"

ajax底层的机制规定,一旦使用了同步,在之前onreadystatechange中编写的事件就会失效

如果在同步的过程中想得到相同的结果,需要把onreadystatechange中的代码拿出来放到send语句后面即可

设置异步时,send不阻塞, "请求发送完成"这句会立即打印出来,随后继续向下执行代码,根据onreadystatechange

监控页面状态,触发相应的状态变动事件,来获取服务器返回的相应结果 

默认都是采用异步的方式.  

4.jQuery对Ajax的支持

 

 

jsonp解决跨域(两个不同域名的应用下进行数据交换)问题

get方法中

                        

启动tomcat,访问servlet,地址上加上参数

在工程引入jQuery的文件

创建一个页面jquery_news.html

 启动tomcat访问该页面,可以看到服务器返回的json

apend()将内容追加到调用该方法的元素后

  一些问题:

1.如果把请求方法改为post

  意思是,在服务端不支持对post请求的处理

因为在servlet中我们只写了doget方法

为了避免这种出错的情况,我们还要增加error属性来进行对异常情况的处理 

 实际工作中只需要获取xmlhttprequest对象即可.根据不同的状态码做出不同的反应

data中传多个参数,用&连接

 也可以用json形式书写

  但实际运用中,jQuery还是会给拼接成&连接格式的字符串

   

 5.实现二级联动菜单

创建类,servlet和显示页面

 

 level=1

 level=2&parent=ai

 

 访问该页面

当选择了某个一级频道时,会触发change事件,也就是选项发生了改变,之后发送ajax请求,去查询对应的二级频道  

第二次选择一级level后,二级level中还有上一次选择的一级level对应的二级level

需要先移除原始内容

 

服务器不会对默认选择做处理,因此返回空数组,没显示任何数据

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!