ajax优点:能在不刷新整个页面的前提下更新数据,使用户操作与服务器响应异步化。

ajax缺点:破坏浏览器“前进”、“后退”按钮的正常功能,搜索引擎爬虫不能理解那些奇怪的JS代码和因此引起的页面内容的变化。

XMLHttpRequest对象:它是ajax实现的关键——发送异步请求、接收响应及执行回调都是通过它来完成的。

//用传统的JavaScript实现的一个简单的ajax例子
var xhr;
if(window.ActiveObject){
xhr=new ActiveObject('Microsoft.XMLHTTP'); //IE6是以ActiveObject方式来引入XMLHttpRequest对象的
}else if{window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}else{
throw new Error('Ajax is not supported by this browser');
}
xhr.onreadystatechange=function(){ //当readyState值被改变时,会激发一个readystatechange事件,用readystatechange属性来注册回调函数
if(this.readyState==4){
if(this.status>=200&&this.status<300){
document.getElementById('someContainer').innerHTML=this.responseText();
}
}
} //指定HTTP方法和要使用的服务器URL,默认情况下async参数为true
xhr.open('GET','test.php',true);
xhr.send();

get方法和post方法的区别:

1.get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器。

2.get方式对传输的数据有大小限制(通常不能大于2kb),而使用post方式传递的数据量要比get方式大得多(理论上不受限制)。

3.get方式请求的数据会被浏览器缓存起来。但这样也会带来安全性问题。

4.get请求应该只用于获取数据时使用,可能需要向服务器发送一些参数数据。如果向服务器发送数据的目的是为了进行改变,就应该使用post请求。

jQuery中的ajax:在jQuery中,$.ajax()方法属于最底层的方法,第2层是load()、$.get()和$.post()方法,第3层是$.getScript()和$.getJSON()方法。

load(url[,parameters][,callback]):parameters(字符串|对象|数组),当使用parameters来提供请求参数时,如果使用的是散列对象或者数组,则通过post方式来发起请求,否则发起get请求。可以在URL添加紧随空格的选择器后缀来指定选择器。

$('.injectMe').load('/someResource div');

$.get(url[,parameters][,callback][,type]):parameters(字符串|对象|数组),callback(在请求完成时回调,传入的第一个参数是响应主体(根据type来解析),第二个参数是文本信息,第三个参数包含对XHR实例的引用),type(指定如何解析响应主体,值为html、text、xml、json、script或者jsonp,它的默认值会根据响应头中定义的内容类型来智能确定,比如Content-Type:text/html表示响应主体为HTML片段,Content-Type:application/json表示响应主体为JSON格式的字符串。)

$.post(url[,parameters][,callback][,type]):parameters(字符串|对象|数组),callback(在请求完成时回调,传入的第一个参数是响应主体(根据type来解析),第二个参数是文本信息,第三个参数包含对XHR实例的引用),type(指定如何解析响应主体,值为html、text、xml、json、script或者jsonp,它的默认值会根据响应头中定义的内容类型来智能确定)

//服务器返回HTML数据,不需要进行处理
$('#send').click(funciton(){
$.get('get1.php',{
username:$('#username').val(),
content:$('#content').val()
},function(data,textStatus){
$('#resText').html(data);
});
});
//服务器返回的数据格式为XML,需要对返回的数据进行处理
//处理XML文档与处理HTML文档一样,也可以使用常规的attr()、find()、filter()以及其他方法
$('#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 textHtml="<div class='comment'><h6>"+username+":</h6><p class='para'>"+content+"</p></div>";
$('#resText').html(txtHtml); //将返回的数据添加到页面上
});
});
//服务器返回的数据格式为JSON,需要对返回的数据进行处理
$('#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');
});

$.getScript(url[,callback]):发起get请求来获取由url指定的脚本。

//new.stuff.js
alert("I'm inline!");
var someVariable="Value of someVariable";
function someFunction(value){
alert(value);
}; //只有在单击#loadButton元素后,才能单击#inspectButton元素来显示警告框alert(value)
$(function(){
$("#loadButton").click(function(){
$.getScript("new.stuff.js");
});
$("#inspectButton").click(function(){
someFunction(someVariable);
});
});

$.getJSON(url[,parameters][,callback]):使用get请求。parameters(字符串|对象|数组),callback第一个参数是把响应主体作为JSON表示法解析所得到的数据值,第二个参数是状态文本,第三个参数提供了一对XHR实例的引用。

$(function(){
$('#send').click(function(){
$.getJSON('test.json',function(data){
$('#resText').empty();
var html=' ';
$.each(data,function(commentIndex,comment){
html+='<div class="comment"><h6>'+comment['username']+':</h6><p class="para">'+comment['content']+'</p></div>';
});
$('#resText').html(html);
});
});
});
//通过使用JSONP形式的回调函数来加载其他网站的JSON数据
//例如从http:/ /Flickr. com搜索汽车类别的4张最新图片
$(function(){
$('#send').click(function(){
$.getJSON("http:/ /api.flickr. com/services/feeds/photos_public.gne?tags=car&tagmode=any&format=json&jsoncallback?",
function(data){
$.each(data.items,function(i,item){
$('<img class="para"/>').attr('src',item.media.m).appendTo('#resText');
if(i==3){
return false;
}
});
}
);
});
});

$.ajax(options)

参数名称

类型

说明

url

String

type

String

请求方式为post或get(默认)

timeout

Number

设置请求超时时间

data

Object或String

发送到服务器的数据。无论是哪种参数类型,$.ajax()实用函数都会负责对值进行编码。

dataType

String

用来识别预计由响应返回的数据类型。如果不指定,jQuery将自动根据HTTP包含的MIME信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型有:xml、html、script、json、jsonp、text

cache

boolean

如果为false,则确保浏览器不会缓存响应,默认为true

content

元素

指定某个元素为与这个请求相关的所有回调函数的上下文

global

boolean

如果为false,则禁止触发全局ajax事件。默认为true

contentType

String

指定请求内容的类型。如果省略,则默认值为application/x-www-form-urlencoded,与表单提交所使用的默认值的类型相同

beforeSend

Function

发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在函数中返回false将会取消请求

function(XMLHttpRequest){

this;    //调用本次Ajax请求时传递的options参数

}

success

Function

如果对请求的响应显示的是成功状态码则调用此函数。第一个参数是由服务器返回,并根据dataType参数进行处理后的数据。第二个参数是包含状态值的字符串——在这种状态下,总是success。第三个参数提供了一个对XHR实例的引用。

function(data,testStatus){

//data  可能是xmlDoc、jsonObj、html、text等

this;    //调用本次Ajax请求时传递的options参数

}

error

Function

如果对请求的响应返回的是错误状态码则调用此函数。传入这个函数的参数有三个:XHR实例、状态消息字符串(在这个情况下,是error、timeout、notmodified、或parseerror)以及可选的异常对象。

function(XMLHttpRequest,textStatus,errorThrown){

//通常情况下textStatus和errorThown只有其他一个包含信息

this;    //调用本次Ajax请求时传递的options参数

}

complete

Function

在请求完成后调用的函数。传入的参数有两个:XHR实例和状态信息字符串(success或error)。如果也指定了success或error回调函数,则会在回调函数之后调用该函数。

function(XMLHttpRequest){

this;    //调用本次Ajax请求时传递的options参数

}

async

boolean

如果为true,则将请求作为同步请求来提交。默认为false

processData

boolean

如果设置为false,则阻止将传入的数据处理为URL编码的格式。默认为true

dataFilter

Function

用来筛选响应数据的回调函数

jsonp

String

指定一个查询参数名称来覆盖默认的jsonp回调参数名callback

username

String

在HTTP认证请求中使用的用户名

password

String

在HTTP认证请求中使用的密码

scriptCharset

String

当远程和本地内容使用不同的字符集时,用来设置script和jsonp请求所使用的字符集

xhr

Function

用来提供XHR实例自定义实现的回调函数

traditional

boolean

如果为true,则使用传统风格的参数序列化。

$.ajax()方法是jQuery最底层的Ajax实现,因此可以用它来代替其他的所有ajax方法。

//代替$.getScript()方法
$(function(){
$('#send').click(function(){
$.ajax({
type:"GET",
url:"text.js",
dataType:"script"
});
});
});
//代替$.getJSON()方法
$(function(){
$('#send').click(function(){
$.ajax({
type:"GET",
url:"test.json",
dataType:"json",
success:function(data){
//代码
});
});
});
});

$.ajaxSetup(options):定义了一组默认的Ajax选项,这些属性与$.ajax()函数的属性完全一样。(通过这个函数设置的默认值不会应用到load()方法,也不会覆盖$.get()和$.post()等实用函数的HTTP请求方式。)

//随后的每个Ajax调用都会使用这些默认值,除非使用传入Ajax实用函数的属性来显式地覆盖它们。
$.ajaxSetup({
type:'POST',
timeout:5000,
dataType:'html'
});

Ajax事件:全局事件是被触发的自定义事件,而局部事件表现为传递给$.ajax()(及其相关的便捷函数)的回调函数。

事件名称

类型

描述

ajaxStart

全局

当Ajax请求开始时触发,只要没有其他请求处于激活状态。对于并发的请求,这个事件只会为第一个请求触发。不传递任何参数

beforeSend

局部

在发起请求之前调用,以便允许在向服务器发送请求之前修改XHR实例,或者通过返回false来取消请求

ajaxSend

全局

在发起请求之前触发,为了允许在向服务器发送请求之前修改XHR实例。

success

局部

当请求返回一个成功的响应时调用

ajaxSuccess

全局

当请求返回一个成功的响应时触发

error

局部

当请求返回一个错误的响应时调用

ajaxError

全局

当请求返回一个错误的响应时触发

complete

局部

当请求结束时调用,而不管状态(是否为同步的请求)如何。

ajaxComplete

全局

当请求结束时调用,而不管状态(是否为同步的请求)如何。

ajaxStop

全局

当Ajax请求结束并且没有其他并发的请求处于激活状态时触发。不传递任何参数

除了使用bind()来创建事件处理器,jQuery还提供了一组方便的函数来创建。

ajaxComplete(callback)、ajaxError(callback)、ajaxSend(callback)、ajaxStart(callback)、ajaxStop(callback)、ajaxSuccess(callback)

jQueryAjax笔记的更多相关文章

  1. 锋利的jQuery--Ajax(读书笔记四)

    1.表单值得序列化 <1>serialize() 例子: html: <form action=""> First name: <input type ...

  2. Python全栈之jQuery笔记

    jQuery runnoob网址: http://www.runoob.com/jquery/jquery-tutorial.html jQuery API手册: http://www.runoob. ...

  3. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  9. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

随机推荐

  1. Table of Contents ---BCM

    Table of ContentsAbout This Document................................................................ ...

  2. html大牛属性

    <META http-equiv="Content-Type" content="text/htmll;charset=gb2312"> 字体 &l ...

  3. Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt

    1. Frank Rosenblatt 首先介绍的是神经网络的开山祖师,先放张图拜拜 Frank Rosenblatt出生在纽约,父亲是医生,其1956年在Cornell大学拿到博士学位后,留校任教, ...

  4. 为控件Button设置快捷键(组合键)

    控件MenuStrip和ContextMenuStrip可通过ShortCcutKeys属性设置快捷键,而控件Button没有ShortcutKey属性,如何为控件Button设置快捷键呢(组合件键) ...

  5. oracle常用命令(比较常见好用)

    一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle  a.启动ORACLE系统 oracle>svrmgr ...

  6. HTML5 canvas beginPath() 方法

    beginPath() 方法开始一条路径,或重置当前的路径.w3school上的解释! 路径是canvas里很重要的一个概念,刚开始学canvas的人对路径理解不是很深,他们在用canvas的时候会乱 ...

  7. transform初学习

    1.什么是transform? transform主要用于形变,位移和旋转,可用于动画. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: jus ...

  8. Android菜鸟成长记9 -- selector的用法

    在项目开发的时候,由于系统给出的控件不够美观,因此开发时领导常常要我更改下界面,用美工给的图片取代系统图片.开始时,我只是给按钮等设置一下背景图片,这样做虽然美观了,但界面看起来却比较死板,比如用户点 ...

  9. css中外边距合并

    最近在布局时遇到一个有趣的问题 <style> #div1{width:200px;height:200px;background:red;}  #div2{width:50px;heig ...

  10. Java 零基础之作业小练习

    [练习1] 需求:输入学员的名称及总科目数并显示每项科目成绩的分数,算出总成绩. package demo2; import java.util.Scanner; //先import Scanner语 ...