jQuery学习笔记(五)

jQuery与Ajax的应用


 Ajax的优势和不足

  • Ajax的优势

a)不需要插件支持

b)优秀的用户体验

c)提高Web程序的性能

d)减轻服务器和宽带的负担

  • Ajax的不足

a)浏览器对XMLHttpRequest对象的支持度不足

b)破坏浏览器前进、“后退”按钮的正常功能

c)对搜索引擎的支持的不足

d)开发和调试工具的缺乏


jquery 中的 Ajax

最底层的方法:$.ajax()

第二层的方法:load()、$.get()、$.post()  (使用频率最高)

第三层的方法:$.getScript()、$.getJson()

  • load()方法

1.载入HTML文档    load(url[,data][,callback])  

 

<div class="comment">
<h6>张三</h6>
<p class="para">沙发</p>
</div>
<div class="comment">
<h6>李四</h6>
<p class="para">板凳</p>
</div>
<div class="comment">
<h6>王五</h6>
<p class="para">地板</p>
</div>
HTML

触发Ajax页面和jQuery

<input type="button" id="send" value="ajax获取" />
<div class="comment">已有评论</div>
<div id="resText"></div>
<script>
$(function(){
$("#send").click(function(){
$("#resText").load("test.html");
});
});
</script>

2.筛选载入的HTML 文档

<!--在载入的文件名后跟选择器-->$("#resText").load("test.html .para");

3.传递方式

load()方法的传递方式根据参数data自动指定,如果没有参数传递,则采用GET方式传递;反之,则会自动转换为POST方式。

//无参数传递,即GET方式
$("resText").load("test.php",function(){
    //....
});
//有参数传递,即POST方式
$("resText").load("test.php",{name:"rain",age:"22"}.function(){
    //....
});

4.回调函数

 对于必须在加载完成后才能继续的操作,load()方法提供了回调函数(callback),该函数有三个参数,分别代表请求返回的内容、请求状态和XTMLHttpRequest对象

$("#resText").load("test.html",function(responseText,textStatus,XMLHttpRequest){
// responseText: 请求返回的内容
// textStatus: 请求状态:success、error、notmodified、timeout 4种
// XMLHttpRequest: XMLHttpRequest对象
});
  • $.get()方法和$.post()方法

 1.$.get()方法  $.get(url[,data][,callback][,type]) 

参数名称

类型

说明

url

String

请求的HTML页的URL地址

data(可选)

Object

发送至服务器的key/value数据回作为QueryString附加到请求URL中

callback(可选)

Function

载入成功时回调函数(只有当Response的返回状态是success才调用该方法)自动将请求结果和状态传递给该方法

type(可选)

String

服务器端返回内容的格式,包括xml、html、script、json、text和_default

 

 a)使用参数

$("#send").click(function(){
    $.get("get1.php",{  //确定请求页面的URL地址
            username:$("#username").val(),
            content:$("#content").val() //将姓名和内容的值作为data参数传递给后台
    },回调函数);
});
$.get()方法的回调函数只有两个参数,且只有当数据成功返回后才会被调用。
function(data,textStatus){
    //data:   返回的内容,可以是XML文档、JSON文件、HTML片段等
    //textStatus:    请求状态:success、error、notmodified、timeout四种
}

b)数据格式

 HTML片段

$(function(){
$("#send").click(function(){
$.get("get1.php",{
username:$("#username").val(),
content:$("#content").val()
},function(data,textStatus){
$("#resText").html(data);    //将返回的数据添加到页面上
});
});
});

XML文档 需要在服务端设置Content-Type类型:header("Content-Type:text/xml; charset=utf-8");//php

$(function(){
$("#send").click(function(){
$.get("get2.php",{
username:$("#username").val(),
content:$("#content").val()
},function(data,textStatus){
var username = $(data).find("comment").attr("username");
var content = $(data).find("comment content").text();
var txtHtml = "<div class='comment'><h6>"
  + username + ":</h6><p class='para'>" + content + "</p></div>";
$("#resText").html(txtHtml);    //将返回的数据添加到页面上
});
});
});

JSON文件

$(function(){
$("#send").click(function(){
$.get("get3.php",{
username:$("#username").val(),
content:$("#content").val()
},function(data,textStatus){
var username = data.username;
var content = data.content;
var txtHtml = "<div class='comment'><h6>"
  + username + "</h6><p class='para'>" + content + "</p></div>";
$("#resText").html(txtHtml);    //将返回的数据添加到页面上
},"json");    //设置$.get()方法的第四个参数(type)为"json"来代表期待服务器端返回的数据格式
});
});

2.$.post()方法

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

** get请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的实体内容发送给web服务器。
** get方式对传输的数据有大小限制(<=2kb),而使用POST方式传递的数据量不受限制
** get方式请求的数据会被浏览器缓存起来,引起安全性问题
** get方式和post方式传递的数据在服务器端的获取也不相同。php中,get方式的数据可以用$_GET[]获取,而post方式可以用$_POST[]获取。两种方式都可以用$_REQUEST[]来获取。

  •  $getScript()方法和$.getJson()方法

 1.$getScript()方法 直接加载.js文件,可以加回调函数)

$(function(){
$("#send").click(function(){
$.getScript("test.js");
});
});

2.$.getJson()方法 用于加载JSON文件,与$.getScript()方法用法相同)

$(function(){
$("#send").click(function(){
$.getJSON("test.json",function(data){
//data:返回的数据
});
});
});

$.each()函数

用于遍历对象和数组。

是一个全局函数,不操作jQuery对象,而是以一个数组或者对象作为第一个参数,以一个回调函数作为第二个参数。

其中回调函数拥有两个参数:第一个是对象成员或数组索引,第二个为对应变量或内容。

$(function(){
$("#send").click(function(){
$.getJSON("test.json",function(data){
$("#resText").empty();    
 //返回数据成功后,首先清空id为resText的元素的内容,以便重新构造新的html
var html = "";
$.each(data,function(commentIndex,comment){    
 //$.each()函数遍历对象和数组
//(以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。
//回调函数拥有2个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容)
html += "<div class='comment'><h6>" + comment['username']
 + ":</h6><p class='para'>" + comment['content'] + "</p></div>";    
 //将遍历出来的内容构建成html代码拼接起来
});
$("#resText").html(html);    //将构建好的html添加到id为resText的元素中
});
});
});
  • $ajax()方法

 $.ajax(options)

该方法只有一个参数,但在这个对象里包含了$.ajax()方法所需要的请求设置以及回调函数等信息,参数以key/value形式存在,且所有参数都是可选的。

$.ajax()方法是jQuery最底层的Ajax实现,可以用来代替前面所有的方法

参数名称

类型

说明

url

String

发送请求的地址,默认为当前页地址

type

String

请求方式(POST或GET,默认为GET)

timeout

Number

设置请求超时时间

data

Object或String

发送到服务器的数据

dataType

String

预期服务器返回的数据类型,可用类型有:xml、html、script、json、jsonp、text

beforeSend

Function

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

complete

Function

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

success

Function

请求成功后调用的回调函数

error

Function

请求失败时被调用的函数

global

Boolean

默认为true。表示是否触发全局Ajax事件


序列化元素

  • serialize()方法

作用于一个jQuery对象,能将DOM元素内容序列化为字符串,用于Ajax请求。

<form id="form1" action="#">
<p>评论</p>
<p>姓名<input type="text" name="username" id="username" /></p>
<p>内容:<textarea name="content" id="content"></textarea></p>
<p><input type="button" id="send" value="提交" /></p>
</form>
HTML

为了获取姓名和内容,必须将字段的值逐个添加到data参数中

$("#send").click(function(){
$.get("get1.php",{
username:$("#username").val(),
content:$("#content").val()
},function(data,textStatus){
$("#resText").html(data);    //将返回的数据添加到页面上
});
});

可以用serialize()改成如下

$("#send").click(function(){
$.get("get1.php",$("form1").serialize(),function(data,textStatus){
$("#resText").html(data);    //将返回的数据添加到页面上
});
});

serialize()方法在其他选择器选取的元素也都能使用该方法

$(":checkbox,:radio").serialize();//把复选框和单选框的值序列化为字符串形式,只会将选中的值序列化。

2.serializeArray()方法

将DOM元素序列化后,返回JSON格式的数据

var fields = $(":checkbox,:radio").serializeArray();
console.log(fields);    //用firebug输出

使用$.each()函数对数据进行迭代输出:

$(function(){
var fields = $(":checkbox,:radio").serializeArray();
console.log(fields);    //用firebug输出
$.each(fields,function(i,field){
$("#results").append(field.value + " , ");
});
});

3.$.param()方法

它是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化

var obj = {a:1,b:2,c:3};
var k = $.param(obj);
alert(k);    //输出a=1&b=2&c=3

jQuery中的Ajax全局事件

当Ajax请求开始时,会触发ajaxStart()方法的回调函数,当Ajax请求结束时,会触发ajaxStop()方法的回调函数。
例如:在加载远程内容时添加提示信息,当Ajax请求开始的时候,将此元素显示,当Ajax请求结束后,将此元素隐藏:

<div id="loading">加载中...</div>
$("#loading").ajaxStart(function(){
    $(this).show();
});
$("#loading").ajaxStop(function(){
    $(this).hide();
});  //也可以用链式写法

其他全局事件有:

ajaxComplete(callback):Ajax请求完成时执行的函数

ajaxError(callback):Ajax请求发生错误时执行的函数,捕捉到的错误可以作为最后一个参数传递
ajaxSend(callback):Ajax请求发送前执行的函数
ajaSuccess(callback):Ajax请求成功时执行的函数

如果想使某个Ajax请求不受全局方法的影响,可以在使用$.ajax(options)方法时,将参数中的global设置为false

$.ajax({
url:"test.html",
global:false    //不触发全局Ajax事件
});
原文地址:https://www.cnblogs.com/BBeyes/p/7434987.html