【jQuery基础学习】05 jQuery与Ajax以及序列化
好吧,这章不像上章那么水了,总是炒剩饭也不好。
关于AJAX
所谓Ajax,全名Asynchronous JavaScript and XML。(也就异步的JS和XML)
简单点来讲就是不刷新页面来发送和获取数据,然后更新页面。
Ajax的优势
- 无需插件支持
- 优秀的用户体验
- 提高web程序的性能
- 减轻服务器和带宽的负担
Ajax的不足
- 浏览器兼容不足
- 破坏浏览器前进和后退按钮的正常功能
- 对搜索引擎的支持不足
- 开发和调试工具的 缺乏
好吧,这些都是几年前的不足。技术的发展很快,这些不足也会慢慢弥补,起码现在调试Ajax并不难。
Ajax的核心是XMLHttpRequest对象,它是Ajax实现的关键。
传统的实现Ajax的例子就不举了,太蛋疼了,我都没记,网上一搜一大堆。
关于jQuery中的Ajax
$.ajax()方法是封装了最原始的js的Ajax方式。
load(),$.get(),$.post()是封装了$.ajax()得来
$.getScript()和$.getJSON()是进一步的封装。
- load()方法
- 用处:载入远程HTML代码并插入DOM中,通常用于获取静态的数据文件,结构为:load(url [,data] [,callback])。
- url为请求的地址
- data可选,为发动到服务器的参数对象
- callback为回调函数,请求不论成功还是失败都调用
- 载入页面的时候甚至可以在地址里加上筛选
$("#resDiv").load("test.html .myClass");//这个div里只载入test.html页面里面 样式为myClass 的元素
//举一个完整的例子
$(function(){
$("#resDiv").load("text.php",{name:"troy",textInfo:"hello"},function(responseText,textStatus,XMLHttpRequest){
//responseText:请求返回的内容
//textStatus: 请求状态:success、error、notmodiffied、timeout 4种
//XMLHttpRequest: XMLHttpRequest对象
});
});
- 用处:载入远程HTML代码并插入DOM中,通常用于获取静态的数据文件,结构为:load(url [,data] [,callback])。
- $.get()方法
- 明显的看到调用的方式不同,所以说这函数是jQuery的全局函数。而此前的方法和load()这种都是对jQuery对象进行操作
- $.get()方法使用GET方式来进行异步请求,结构为:$.get(url [,data] [,callback] [,type])
- 前三个参数就不说了,唯一不同的是callback只有请求成功才调用
- type参数为服务器端返回内容的格式,包括xml,html,script,json,text和_default
- 例子
$("#send").click(function()
$.get("get1.php"
,{
username:$("#username").val(),
content:$("#content").val()
}
,function(data,textStatus){
//data: 返回的内容,可以是XML文档、JSON文件、HTML片段
//textStatus: 请求状态:success、error、notmodiffied、timeout 4种
}
)
})
- $.post()方法
- 它与get方法的玩法一样,不过一个是get方式,一个是post方式。
- $.getScript()方法
- 有的时候页面初次加载没必要获取所有的脚本,所以jQuery提供了getScript这种方法来直接加载js文件。
- 例子
$('#send').click(function(){
$.getScript('test.js',function(){
//do something 这个时候脚本已经加载了,不需要再对js文件进行处理
});
});
- $.getJSON()方法
- 用于加载JSON文件,用法同上,只不过返回的json数据而已
$('#send').click(function(){
$.getJSON("myurl",function(data){
var html="";
$.each(data,function(commentIndex,comment){
html+=commentIndex+":"+comment['username']+";";
})
alert(html);
})
});
//注意一下ecch这种玩法,同样是个全局函数。他的回调函数中,第一个参数为成员的索引,第二个为变量和内容顺便扩展一下,跨域访问的JSONP
$("#send").click(function(){
$.getJSON("http://www.某网站.com/services/getMyCmpJson?tags=car&tagmode=any&format=json&jsoncall back=?"
,function(data){
//某些操作
}
)
})
//JSONP是个非官方协议,采用json与<script>标记结合的方式,主要用于web应用程序跨域
- 用于加载JSON文件,用法同上,只不过返回的json数据而已
- $.ajax()方法
- 这个方法是jQuery最底层的Ajax实现,所以理所当然更加强大以及复杂。
- url:默认当前页地址,也可以手动写请求的地址
- type:默认为GET,也可以写POST
- timeout:设置请求超时时间(毫秒)
- data:发送的数据
- dataType:预期服务器返回的数据类型。
- beforeSend:发送前的调用的函数,如果次函数返回false将取消本次ajax请求。
function(XMLHttpRequest){//XMLHttpRequest是唯一的参数
this;//调用本次Ajax请求时传递的options参数
} - complete:请求完后,无论成功还是失败都调用。
function(XMLHttpRequest,textStatus){//textStatus描述成功请求类型
this;//调用本次Ajax请求时传递的options参数
} - success:请求成功后的回调函数
function(data,textStatus){//data为成功返回的数据
this;//调用本次Ajax请求时传递的options参数
} - error:请求失败调用的函数
function(XMLHttpRequest,textStatus,errorThrown){
// textStatus为错误信息,errorThrown为捕获的错误对象,通常只有其中一个包含信息
this;//调用本次Ajax请求时传递的options参数
} - global:默认为true。表示是否触发全局Ajax事件。
虽然它只有一个参数,但是这个参数对象包含的属性非常多,不过都是可选的。以下列出所有属性:
- 序列化元素
- serialize()方法
- 它能够将DOM元素内容序列化为字符串
//不仅可以序列化整个表单,也可以序列化单个元素,并且都是自动编码过的
$.post("myurl",$("#form1").serialize(),function(data,textStatus){
$("#resText").html(data);
})
- 它能够将DOM元素内容序列化为字符串
- serializeArray()方法
- 它能够将DOM元素内容序列化为JSON格式
- $.param()方法
- 这是serialize方法的核心,用来对一个数组或对象按照键值对进行序列化
var obj={a:1,b:2,c:3};
var k=$.param(obj);//输出为a=1&b=2&c=3
- 这是serialize方法的核心,用来对一个数组或对象按照键值对进行序列化
- serialize()方法
- jQuery中的Ajax全局事件
- ajaxStart()方法:当Ajax请求开始就触发
- ajaxStop()方法:当Ajax请求结束就触发
<div id="loading">加载中...</div> $("#loading").ajaxStart(function(){
$(this).show();//ajax开始请求就显示加载中
}); $("#loading").ajaxStop(function(){
$(this).hide();//ajax开始结束就隐藏加载中
}); - ajaxComplete():当Ajax请求完成就触发
- ajaxError():当Ajax请求发生就触发,捕捉到的错误可以作为最后一个参数传递
- ajaxSend():当Ajax请求发送前就触发
- ajaxSuccess():当Ajax请求成功就触发
- 如果想使某个Ajax请求不受全局事件的影响,可以在$.ajax中将global属性设置为false,这个在前面已经讲过了。当然也可以在ajax请求前:
$.ajaxPrefilter(function(options){//每次发送前请求
options.global=true;
})
好吧,写完了。最后顺带提一下,setTimeout("doMethod()",4000);为4s后执行doMethod这个函数。
//一个简单的定时发送功能
function updateMsg(){
$.post("myurl",{time:timestamp},function(xml){
//do something
});
setTimeout("updateMsg()",4000);
}
【jQuery基础学习】05 jQuery与Ajax以及序列化的更多相关文章
- jQuery基础学习3——jQuery库冲突
默认情况下,jQuery用$作为自身的快捷方式. jQuery库在其他库之后导入 在其他库和jQuery库都被加载完毕后,可以在任何时候调用jQuery.noConflict()函数来将变量$的控制权 ...
- jQuery基础学习(一)—jQuery初识
一.jQuery概述 1.jQuery的优点 jQuery是一个优秀的JavaScript库,极大地简化了遍历HTML文档.操作DOM.处理事件.执行动画和开发Ajax的操作.它有以下几点优 ...
- jQuery基础学习(二)—jQuery选择器
一.jQuery基本选择器 1.CSS选择器 在学习jQuery选择器之前,先介绍一下之前学过的CSS选择器. 选择器 语法 描述 示例 标签选择器 E { ...
- jQuery基础学习4——jQuery容错性
使用jQuery选择器不仅比使用传统的getElementById()和getElementsByTagName()函数简洁得多,而且还能避免某些错误. <script type="t ...
- jQuery基础学习(三)—jQuery中的DOM操作
一.查找节点 查找属性节点: 通过jQuery的选择器来完成. 操作属性节点: 调用jQuery对象的attr()来获取它的属性值. 操作文本节点: 通过text()方法 ...
- JQuery基础学习总结
JQuery基础学习总结 简单总结下JQuery: 一:事件 1.change事件 <!DOCTYPE html> <html lang="en"> < ...
- 【jQuery基础学习】00 序
作为一个从来没有认真学过jQuery的菜来讲,我所学的都是jQuery基础. 算是让自己从0开始系统学一遍吧.学习书籍为:<锋利的jQuery>. 虽然是个序,表示一下我是个菜,但还是来几 ...
- 【总结整理】JQuery基础学习---样式篇
进入官方网站获取最新的版本 http://jquery.com/download/ 中文 https://www.jquery123.com/ <!--JQuery:轻量级的JavaScr ...
- jQuery基础学习
一.简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“Write ...
- 【jQuery基础学习】09 jQuery与前端(这章很水)
这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...
随机推荐
- sql读取xml
DECLARE @ItemMessage XML SET @ItemMessage=cast(N'<?xml version="1.0" encoding="utf ...
- 不同iOS版本做代码适配__IPHONE_OS_VERSION_MAX_ALLOWED 和 __IPHONE_8_0等专业术语
目前开发只想最低版本支持iOS8了,iOS8以前的就不管了,然后现在iOS9和iOS10出来以后,有些新的API,也有些弃用的API,为了兼容,有时候代码里面需要编写判断不同iOS版本,或者只允许指定 ...
- GNU风格 ARM汇编语法指南
汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器等.这些初始化工作完成后就可以跳转到C代码main函数中执行. 1. GNU汇编语言语句格式 任何Linux汇编 ...
- 记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面安装)
最近几天,到一个项目上安装Linux部署环境.由于服务器在机房,而进机房又比较麻烦,于是选择VNC远程连接Linux就显得自然而然了.以前也用过VNC,而且还经常使用,由于各个项目环境不太一样,这次也 ...
- 入手Cubieboard2之制作最小Linux系统
前言 昨天终于入手了一块Cubieboard2板子,今年4月入职从事的就是与之相关的工作,因此趁现在有时间就好好熟悉一下. 一.主机环境 1.PC主机WIN 7旗舰版 1.虚拟机VM7.0 2.ubu ...
- 编写并发程序 Inversion
做完了 scala parallel 课程作业后,觉得 scala 写并发程序的便捷性是 java 永远都追不上的.scala 的Future 和 Promise,java 里 Future 和 Co ...
- saiku执行过程代码跟踪
使用了很久的saiku,决定跟踪一下代码,看看它的执行核心过程: 一.入口controller代码 1.1.页面打开之后,会发送一个ajax请求 Request URL: http://l-tdata ...
- Why is processing a sorted array faster than an unsorted array?
这是我在逛 Stack Overflow 时遇见的一个高分问题:Why is processing a sorted array faster than an unsorted array?,我觉得这 ...
- 明天去FDUSC报道了,GOD BLESS ALL OF US
@lrb @tellmewtf @proverbs
- 十二、EnterpriseFrameWork框架核心类库之与EntLib结合
从本章开始对框架的讲叙开始进入核心类库的讲解,前面都是对框架外在功能讲解,让人有个整体的概念,知道包含哪些功能与对系统开发有什么帮助.以后多章都是讲解核心类库的,讲解的方式基本按照代码的目录结构,这样 ...