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事件
});
时间: 2024-10-12 09:07:37

jQuery学习笔记(五)的相关文章

jQuery源码学习笔记五 六 七 八 转

jQuery源码学习笔记五 六 七 八 转 Js代码   <p>在正式深入jQuery的核心功能选择器之前,还有一些方法,基本都是数组方法,用于遴选更具体的需求,如获得某个元素的所有祖选元素啦,等等.接着是其缓存机制data.</p> <pre class="brush:javascript;gutter:false;toolbar:false"> //@author  司徒正美|なさみ|cheng http://www.cnblogs.com/ru

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

WEB前端学习笔记 五

接web前端学习笔记第四篇,此篇为web学习笔记 五,在此感谢您的采集和转发,但请注明文章出自网知博学. 2.0.3  html标签的属性格式 现在我们知道了两个双标签分别是,标题标签:<h1> - <h6>.和段落标签:<p></p>还知道了一个换行的单标签:<br />,现在我们给<p></p>标签添加一个属性,来改变段落是右对齐,还是左对齐,还是居中. 如上图,<p>标签中的 align(中文就是排列的意

锋利的JQuery 学习笔记

第一章 认识JQuery ·页面加载事件(可以写多个ready())$(document).ready(function(){alert(“hello world”);}) ·链式操作:JQuery允许你在一句代码中操做任何与其相关联的元素,包括其子元素.父元素等//选择名称为myDiv的元素,为其自身添加css1的样式,然后再选择其所有子元素a,为其移除css2样式$(“#myDiv”).addClass(“css1″).children(“a”).removeClass(“css2″); ·

Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记(五)----协同IResult 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute after the return of a action. /// </summary> public interface IResult { /// <summary> /// Executes the result using the specif

Js脚本之jQuery学习笔记(1)

Js脚本之jQuery学习笔记(1) 一.javascript基础 单行注释 多行注释 /* */ 数据类型 数值型 字符串型 布尔型 空值 未定义值 转义字符 函数定义:1234567891011121314<head><script language="javascript"function test(m){var xixi="嘻嘻"alert("这是javascript")document.write(xixi + m)}

jQuery学习笔记--JqGrid相关操作 方法列表(上)

1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选中行:$("#jqGrid

jQuery学习笔记10:Ajax技术

jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. jQuery 采用了三层封装:最底层的封装方法为:$.ajax(),而通过这层封装了第二层有三种方法:.load().$.get()和$.post(),最高层是$.getScript()和$.getJSON()方法. 函数 描述 jQuery.ajax() 执行异步 HTTP (Ajax) 请求. .ajaxComplete() 当 Ajax 请求完成时注册要调用的处理程序.这是一个

jQuery学习笔记之过滤器三(向上查找兄弟元素、向下查找兄弟元素)

向上查找兄弟元素的方法:prev方法.prevAll方法.prevUntil方法 向下查找兄弟元素:next方法.nextAll方法.nextUntil方法 向上查找兄弟元素 1.prev方法 2.prevAll方法 3.prevUntil方法 向下查找兄弟元素 1.next方法 2.nextAll方法 3.nextUntil方法 jQuery学习笔记之过滤器三(向上查找兄弟元素.向下查找兄弟元素)

angular学习笔记(五)-阶乘计算实例(1)

<!DOCTYPE html> <html ng-app> <head> <title>2.3.2计算阶乘实例1</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="script.js"></script> </