微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax简介

ajax是什么?
使用xmlhttpRequest对象异步向服务器发送请求

服务器返回部分的数据,而不是一个完整的页面,以页面无刷新的效果更改页面中的局部数据。

function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveObject(“Microsoft.XMLHttp”);
}
return xhr;
}

异步对象的属性方法
open
send
getRequestHeader
getAllRequestHeaders
readyState
onreadystatechange
responseText
responseXML
status:

发送ajax请求的步骤:
获取ajax对象:xmlhttprequest
设置回调函数:为ajax对象的readystatechange事件设定响应函数
创建请求:调用xmlhttprequest的open方法
发送请求:调用ajax对象的send方法

编写回调函数
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status ==200){
var txt = xhr.responseText;
//DOM操作
}
}

创建请求–get请求
xhr.get(“get”,“xx.do”,true);
注意:
true:表示发送异步请求,(当ajax对象发送请求时,用户然让能够对当前页面做其他处理)
false:表示发送同步请求,(当ajax对象发送请求时,浏览器会锁定当前页面用户不能够做其他的操作)

创建POst请求:
xhr.open(“post”,“xx.do”,true);
xhr.setRequesHeader(‘content-type’,‘applicationn/x-www-form-urlencoded’);

setRequestHeader的作用:因为http协议要求发送post请求,必须有content-type消息头,但是认的情况下
xhr不会添加消息头,所以,需要调用setRequestHeader,添加这个消息头。

发送请求:
get xhr.send(null)
post xhr.send(name=value & name=value);
get请求:send方法内传递null
若需要提交数据,则在open方法内的url后面追加
xhr.open(“get”,“xx.do?name=value&name=value”,true);

编写服务器段代码
public void service(HttpServletRequest request,HttpServetReaponse response){
request.setCharacterEncoding();
response.setContentType(“text/html;charset=utf-8”);
out.println(“用户名已经存在”);
}

ajax的应用:
输入的值需要校验,如果检测注册用户名是否已经被占用
搜索是出现的自动提示列表
级联操作
数据录入和列表显示在同一个界面
不需要刷新界面

post请求时的乱码问题:
所有的额浏览器提供的ajax对象对请求参数使用utf-8进行编码
服务器认使用iso-8859-1
编码和解码不一致就会产生乱码

request.setCharacterEncoding(“utf-8”);
注意:火狐就不能使用这句代码,因为这个浏览器会在发送的请求数据包中告诉
服务器,他是那种方式进行数据编码

get请求时的乱码:
IE浏览器提供的ajax对象会使用gbk字符集对请求参数进行编码。而其他浏览器会使用utf-8
来编码
服务器认使用iso-8859-1
编码和解码不一致就会产生乱码

解决get请求时的乱码问题:

文档小,解析速度快

json结构:主要分为两种,
名称/值 的集合,不同的语言理解为对象,记录,结构等
–值的有序列表,数组

{属性名:属性值,属性名:属性值}
属性值:可以是String number boolean null object
属性名需要使用""起来
属性值如果是String,必须使用双引号括起来

json可以表示数组:
[{},{}]

对象:{"":"","":[]}

json字符串–jacascript对象:eval() paese() parseJSON()

eval("("+str+")");

var obj = JSON.parse(str);

var obj = str.parseJSON();

还有prototype中的一个函数
var obj= str.evalJSON();

将java对象转化成为json对象:
JSON提供的API JSONObject JSONArray

缓存问题:
IE浏览器提供的ajax对象,在发送get请求时,会查看是否访问过这个地址,如果已经
访问过,那么浏览器就不在发送请求。

各种浏览器对同一地址的处理:
IE 不再发送
Firefox 继续发送
Chormme 继续发送

解决方式:
方式一:在请求地址后面添加一个随机

xhr.open(“get”,“getNumber.do?”+Math.random(),“true”);

方式二:发送post请求

发送同步请求:

var obj = str.eval();
var obj2 = str.parseJSON();//需要使用json.js
var obj3 = JSON.parse(str);
var obj4 = str.evalJSON();

将json对象转化成为json字符串:
var str = obj.toJSONStirng();//需要json.js
vat str2 = JSON.stringify(obj);

什么是JQuery对象:
JQuery为了解决浏览器的兼容性问题而提供的一种统一封装后的对象描述

将dom对象转化成为JQuery对象
$(dom对象)

var $obj = $(obj);
$obj.html();

DOM—Jquery:
( d o m 对 象 ) . g e t ( 0 ) / (dom对象).get(0)/ (dom对象).get(0)/(dom对象).get()[0];

jquery的选择器:
能够实现内容和行为的分离:

$(’#id’)
$(’.s1’)
$(‘div’)

合并选择器:
$(’#di,.s1,p’).css();

$(’*’)

层次选择器:

$(’#d1 div’)

$(’#d1>div’):只查找直接子节点

$(’#d1+div’):表示下一个兄弟节点

$(’#d2~div’):代表下面的所有兄弟

基本过滤选择器:以: 或者[] 开始
:first
:last
:not(selector) 把selector排除在外
:even 挑选偶数行
:odd 计数行
:eq()
:gt(index) 大于下标
:lt(index) 下标小于index

内容过滤选择器:
:contains(text)
:empty
:has(selector)
:parent 含有子元素和文本的元素

可见性过滤选择器:
:hidden 匹配所有不可见元素 或者type为hidden的元素
:visible 匹配所有的可见元素

属性过滤选择器:
[attribute]
[attribute=value]
[attribute!=value]

子元素过滤选择器:
:nth-child(index/even/odd)将为每一个父元素匹配子元素 index从1开始
:eq(index)

表单对象属性过滤选择器:
:enabled
:disabled
:checked
:selected

表单选择器:
:input
:text
:password

Jquery操作DOM --查询
html():读取或者修改html内容

text():读取或者修改html内容

val() :读取或者修改节点value属性

attr(): 读取或者修改节点的属性

JQuery创建 插入 删除
创建节点:
$(html)

var $obj = $(‘

hello ’);
( ′ b o d y ′ ) . a p p e n d ( ('body').append( (′body′).append(obj);

简写:$(‘body’).append(‘

hello ’);

插入dom节点:
append():
prepend():作为第一个子节点添加
after(): 作为下一个兄弟节点添加进来
berfore():

删除节点:
remove():
remove(selector):
empty():清空节点

复制节点:
clone():
clone(true):复制的节点也具有行为,将处理代码一起复制

样式操作:
attr(“class”,"") 获取和设置
addClass("")
removeClass("")
removeClass()
toggleClass():切换样式
hasClass(""):是否有某个样式
css("") 读取css的值
css("","") 设置多个样式

遍历节点:
children()/children(selector):只考虑直接子节点
next()/next(selector)
prev()/prev(selector)
siblings()/
find(selector):查找满足条件的后代
parent() 父节点(没有选择器)

JQuery中的事件处理:

使用JQuery事件绑定:
$obj.bind(事件类型,事件处理函数)

$obj.bind(‘click’,function(){});他的简写形式:
$obj.click(funciton(){});
代表触发click函数

获取事件对象:
只需要为事件处理函数传递任意的一个参数
$obj.click(function(e){});
e就是事件对象,但是已经经过JQuery对底层事件对象的封装。
封装后的事件对象可以方便的兼容各种浏览器。

事件对象的常用属性
var obj = e.target;
获取事件源:返回的是dom对象
获取鼠标点击的坐标:
e.pageX
e.pageY

事件冒泡:
子节点产生的事件会依次向上抛给父节点:
e.stopPropagation();取消事件冒泡

JQuery中的合成事件:
hover(mouseenter,mouseleave):模拟光标悬停事件

toggle():多个事件响应中切换:

模拟操作的语法:

$obj.trigger(事件类型):

$obj.trigger(‘focus’);
$obj.focus();

show() /hide()

通过改变元素的高度和宽度来实现下你是或者隐藏。
$obj.show(时间,会调函数);
执行时间:slow normal fast 或者毫秒数

slideDown()/slidUp()

fadeIn() fadeOut()

自定义函数
animate(js对象,执行时间,回调函数):
js对象,描述动画执行之后元素的样式,

$(‘div’).click(function(){
$(this).animate({‘left’:‘500px’},4000);
$(this).animate({‘top’:‘300px’},2000).fadeOut(‘slow’);
});

JQuery中的类数组:
JQuery中封装了多个DOM对象,
类:指的是类似,
具备自己特有的操作方法

类数组的操作:
length
each(fn):遍历类数组,fn用来处理DOM对象,在fn中this表示正在遍历的那个DOM对象。
fn函数可以提那家一个参数i用来表示正在比你阿里的DOM对象的下标。
eq(index)
get():返回一个DOM对象组成的数组
index(obj):返回DOM或者JQuery对象在类数组中的下标

JQuery对ajax的支持
load:作用将服务器返回的数据字节添加到符合要求的节点之上。

$obj.load(请求地址,请求参数);

请求参数:username=tom &age = 22
有参数,发送post请求,否则发送get请求

post():
$.post(’’,function(){},’’);

get():发送get请求
用法:$.get(请求地址,请求参数,回调函数,服务器返回的数据类型)

回调函数添加的参数是服务器返回的数据
服务器返回的数据类型:
html:html文本,
text:文本,
JSON:js对象
xml:XML文档
script:javascript脚本

ajax():

$.ajax({});
{}类可以设置的选项参数:
url:
type:
data:
dataType:
success:服务器处理正常对应的回调函数
error:服务器出错对应的回调函数
async:true当值为false是表示发送同步请求

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐