回顾原生JS ajax
查看之前的博文 ajax 和 mock 数据
w3school 关于ajax
原生JS ajax 的用法
var xhr = new XMLHttpRequest()
xhr.open('GET','https://www.easy-mock.com/mock/5b7238fdf22b3d63d2d67b28/jQuery-mock-test',true) xhr.send() xhr.addEventListener('load',function(){ console.log(xhr.status) if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){ var data = xhr.responseText console.log(data) }else{ console.log('error') } }) xhr.onerror = function(){ console.log('error') }
jQuery 的 ajax 用法
先看一个 $.ajax
的案例
$.ajax({
url: 'https://www.easy-mock.com/mock/5b7238fdf22b3d63d2d67b28/jQuery-mock-test',
method: 'GET'
}).done(function(result){ console.log(result) }).fail(function(){ console.log('error') })
最下 demo 模拟该 ajax 案例,mock 数据结果如下图

jQuery.ajax( [settings ] )
方法提供了几个常用的setting
-
async:默认设置下,所有请求均为异步请求(也就是说这是默认设置为
true
)。如果需要发送同步请求,请将此选项设置为false
-
beforeSend:请求发送前的回调函数,用来修改请求发送前 jqXHR 对象,此功能用来设置自定义 HTTP 头信息,等等。该 jqXHR 和设置对象作为参数传递
-
cache:如果设置为
false
,浏览器将不缓存此页面。注意:设置cache
为false
将在 HEAD 和 GET 请求中正常工作。它的工作原理是在 GET 请求参数中附加"_={timestamp}"
-
context:这个对象用于设置 ajax 相关回调函数的上下文。 默认情况下,这个上下文是一个 ajax 请求使用的参数设置对象
-
data:发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后面,POST请求作为表单数据
-
headers:一个额外的
{键:值}
对映射到请求一起发送。此设置会在 beforeSend 函数调用之前被设置;因此,请求头中的设置值,会被 beforeSend 函数内的设置覆盖 -
method:HTTP 请求方法(比如:"POST","GET ","PUT",1.9之前使用
type
)
jQuery.get( [settings] ) / jQuery.post( [settings ] )
这两个方法专门用来处理 get
和 post
请求
$.ajax 写法
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
})
$.ajax({
type: "POST", url: url, data: data, success: success, dataType: dataType })
$.get 写法
$.get('https://www.easy-mock.com/mock/5b7238fdf22b3d63d2d67b28/jQuery-mock-test').done(function(result){
console.log(result) })
jQuery.getJSON( url [, data ] [, success(data, textStatus, jqXHR) ] )
$.ajax 写法
$.ajax({
dataType: "json",
url: url,
data: data,
success: success })
$.getJSON 写法
$.getJSON('https://www.easy-mock.com/mock/5b7238fdf22b3d63d2d67b28/jQuery-mock-test',function(result){
console.log(result) })
.serialize() / serializeArray()
将用作提交的表单元素的值编译成字符串,方法没有参数,使用标准的 URL-encoded 符号上建立一个文本字符串. 它可以对一个代表一组表单元素的 jQuery 对象进行操作,比如<input>, <textarea>, 和 <select>
<form id="holder">
<input type="text" name="a" value="1"/> <div> <input type="text" name="b" value="2" id="b" /> </div> <input type="hidden" name="c" value="3" id="c" /> <div> <input type="checkbox" name="f" value="8" checked="true"/> <input type="checkbox" name="f" value="9" checked="true"/> </div> </form>
$("#holder").serialize(); //a=1&b=2&c=3&f=8&f=9
$("#holder").serializeArray();
/*
[
{name: 'a', value: '1'},
{name: 'b', value: '2'}, {name: 'c', value: '3'}, {name: 'f', value: '8'}, {name: 'f', value: '9'} ] */
serialize
和serializeArray
都是针对 jQuery对象(选中的 form 元素)进行操作,只是返回值格式不同。
特别注意:这2个 API 只能操作form,如果将 holder 改成 div,则不起任何作用。