JQuery与AJAX
阅读 (372)一、load()方法
原型:load(url[, data][, callback])
功能:load() 方法通过 AJAX 请求从服务器加载数据,并把返回的数据放置到指定的元素中
说明:该方法是最简单的从服务器获取数据的方法。它几乎与 $.get(url, data, success)
等价,不同的是它不是全局函数,并且它拥有隐式的回调函数。当侦测到成功的响应时(比如,当 textStatus 为 “success” 或 “notmodified” 时),.load()
将匹配元素的 HTML 内容设置为返回的数据。这意味着该方法的大多数使用会非常简单
参数 | 说明 |
---|---|
url | 请求HTML页面的URL地址 |
data | 可选参数。发送至服务器的key:value数据 |
callback(response,status,xhr) | 可选参数。请求完成时的回调函数,无论请求是否成功 response - 包含来自请求的结果数据 status - 包含请求的状态(“success”, “notmodified”, “error”, “timeout” 或 “parsererror”) xhr - 包含 XMLHttpRequest 对象 |
-
载入HTML文档
准备界面sunck.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <div> <p class="cl1">good</p> <p class="cl1">nice</p> <p class="cl2">handsome</p> </div> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="http://192.168.1.32:8090/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script> </head> <body> <div id="box"></div> <button id="button">请求数据</button> <script type="text/javascript"> $(function(){ $("#button").bind("click", function(){ //$("#box").load("http://192.168.1.32:8090/test.txt"); //$("#box").load("http://192.168.1.32:8090/sunck.html"); }); }); </script> </body> </html>
-
载入HTML文档中的指定元素
$("#box").load("http://192.168.1.32:8090/sunck.html .cl1");
-
传递方式(get、post)和回调参数
load()方法的传递方式是根据传递的参数data来指定的。如果没有传递参数,默认采用GET方式传递,否则将自动转换为POST方式
$("#box").load("http://192.168.1.32:8090/sunck.html",{x:"1", y:"2"},function(response,status,xhr){ console.log(response); console.log("-------------------") console.log(status); console.log("-------------------") console.log(xhr); });
二、get()方法与post()方法
-
get()方法
原型:
$.get(url[, data][, callback][, type])
功能:使用GET方式进行异步请求
注意:与load()方法不同,回调函数只有当数据成功返回时才能被调用
参数 说明 url 请求URL地址 data 可选参数。发送到服务器的数据 callback(data, status) 可选参数。规定当请求成功时运行的函数 type 可选参数。预计的服务器响应的数据类型
默认地,jQuery将智能判断 -
post()方法
原型:
$.post(url[, data][, callBack][, type])
功能:使用POST方式进行异步请求
注意:与load()方法不同,回调函数只有当数据成功返回时才能被调用
参数 说明 url 请求URL地址 data 可选参数。发送到服务器的数据 callback(data, status) 可选参数。规定当请求成功时运行的函数 type 可选参数。预计的服务器响应的数据类型
默认地,jQuery将智能判断
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<form name="form" action="">
<input type="text" id="username" placeholder="用户名" /><br/>
<input type="password" id="passwd" placeholder="密码" /><br/>
<input type="button" id="button" value="提交"/>
</form>
<script type="text/javascript">
$(function(){
$("#button").bind("click", function(){
var data = {
username: $("#username").val(),
passwd: $("#passwd").val()
}
$.get("test.txt", data, function(data, status){
console.log(data);
console.log(status);
})
});
});
</script>
</body>
</html>
三、getScript()方法
原型:getScript(url[, callback])
功能:通过全局函数$.getScript()
加载JS文件后,不仅可以像加载HTML片段一样简单方便,而且JavaScript文件会自动执行,大大提高了页面的执行效率
参数 | 说明 |
---|---|
url | 请求URL地址 |
callback(response,status,xhr) | 可选参数。请求完成时的回调函数,无论请求是否成功 response - 包含来自请求的结果数据 status - 包含请求的状态(“success”, “notmodified”, “error”, “timeout” 或 “parsererror”) xhr - 包含 XMLHttpRequest 对象 |
alert("sunck is a good man");
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<button type="button" id="btn">加载js文件</button>
<script type="text/javascript">
$(function(){
$("#btn").bind("click", function(){
$.getScript("sunck.js", function(response, status, xhr){
console.log("加载完毕");
console.log(response);
console.log(status);
console.log(xhr);
});
});
});
</script>
</body>
</html>
四、getJSON()方法
原型:getJSON(url[, callback])
功能:加载JSON文件
参数 | 说明 |
---|---|
url | 请求URL地址 |
callback(response,status,xhr) | 可选参数。请求完成时的回调函数,无论请求是否成功 response - 包含来自请求的结果数据 status - 包含请求的状态(“success”, “notmodified”, “error”, “timeout” 或 “parsererror”) xhr - 包含 XMLHttpRequest 对象 |
[
{
"name":"轻鸿",
"sex":"女",
"email":"mingrisoft@mingrisoft.com"
},
{
"name":"无语",
"sex":"女",
"email":"mxxx@163.com"
}
]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<button type="button" id="btn">加载json文件</button>
<div id="json"></div>
<script type="text/javascript">
$(function(){
$("#btn").bind("click", function(){
$.getJSON("test.json", function(response, status, xhr){
var htmlStr = "";
$.each(response, function(index, info){
htmlStr+="姓名:"+info['name']+"<br/>";
htmlStr+="性别:"+info['sex']+"<br/>";
htmlStr+="邮箱:"+info['email']+"<br/><br/>";
});
$("#json").html(htmlStr);
console.log(response);
console.log(status);
console.log(xhr);
});
});
});
</script>
</body>
</html>
五、ajax()方法
原型:ajax([options])
说明:除了可以使用全局性函数load()、.get()、.post()实现页面的异步调用和与服务器交互数据外,在jQuery中还有一个功能更为强大的最底层的方法$.ajax(),该方法不仅可以方便地实现上述三个全局函数完成的功能,而且可以更多地关注实现过程中的细节
注意:参数options为ajax()方法中的请求设置,格式为key:value,既包含发送请求的参数,也含有服务器响应后回调的数据
参数名称 | 类型 | 说明 |
---|---|---|
url | String | 发送请求的地址 |
type | String | 数据请求方式(post或get),默认为get |
data | string或Object | 发送到服务器的数据 如果不是字符串则自动转成字符串格式,如果是GET请求方式,那么该字符串将附在URL之后 |
dataType | String | 服务器返回的数据类型 如果没有指定,jQuery将自动根据HTTP包MIME信息自动判断,服务器返回的数据根据自动判断结果进行解析,传递给回调函数 可用类型如下: html:返回纯文本的HTML信息,包含的script标记会在插入页面时被执行 script:返回纯文本的JavaScript代码 text:返回纯文本的字符串 xml:返回可被jQuery处理的XML文档 json:返回JSON格式的数据 |
beforeSend | Function | 该函数用于发送请求前修改XMLHttpRequest对象,其中参数就是XMLHttpRequest对象,由于该函数本身是jQuery事件,因此如果函数返回false,则表示取消本次事件 function (XMLHttpRequest){ this;//调用本次ajax请求时传递的options参数 } |
complete | Function | 请求完成后调用的回调函数,该函数无论数据发送成功或失败都会调用,有两个参数,一个是XMLHttpRequest对象,另一个是textStatus,用来描述状态的字符串 function (XMLHttpRequest, testStatus){ this;//调用本次ajax请求时传递的options参数 } |
success | Function | 请求成功后调用的回调函数,该函数有两个参数,一个是根据dataType处理后服务器返回的数据,另一个是textStatus,用来描述状态的字符串 function (data, testStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this;//调用本次ajax请求时传递的options参数 } |
error | Function | 请求失败后调用的回调函数,该函数有三个参数,第一个是XMLHttpRequest对象,第二个是出错信息strError,第三个参数是捕获到的错误对象strObject function (XMLHttpRequest, strError, strObject){ //通常请情况下strError和strObject只有一个包含信息 this;//调用本次ajax请求时传递的options参数 } |
global | Boolean | 是否响应全局事件,默认是true,表示响应。如果设置为false,表示不响应。全局事件$.ajaxStart 等不响应 |
timeout | Number | 请求超时的时间(毫秒),该设置将覆盖$.ajaxSetup() 方法的全局设置 |
[
{
"name":"轻鸿",
"sex":"女",
"email":"mingrisoft@mingrisoft.com"
},
{
"name":"无语",
"sex":"女",
"email":"mxxx@163.com"
}
]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<form name="form" action="">
<input type="text" id="username" placeholder="用户名" /><br/>
<input type="password" id="passwd" placeholder="密码" /><br/>
<input type="button" id="button" value="请求数据"/>
</form>
<div id="json"></div>
<script type="text/javascript">
$(function(){
$("#button").bind("click", function(){
var data = {
username: $("#username").val(),
passwd: $("#passwd").val()
}
$.ajax({
url: "test.json",
type: "get",
data: data,
dataType: "json",
success: function(data, textStatus){
var htmlStr = "";
$.each(data, function(index, info){
htmlStr+="姓名:"+info['name']+"<br/>";
htmlStr+="性别:"+info['sex']+"<br/>";
htmlStr+="邮箱:"+info['email']+"<br/><br/>";
});
$("#json").html(htmlStr);
}
})
});
});
</script>
</body>
</html>
六、serialize()方法
当表单所需要收集的数据较多时,在传递之前需要放入一个对象中,如此操作比较麻烦
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<form id="testForm" action="">
用户名:<input type="text" name="username" id="username"/><br/>
性别:<input type="text" name="sex" id="sex"/><br/>
年龄:<input type="text" name="age" id="age"/><br/>
邮箱:<input type="text" name="email" id="email"/><br/>
地址:<input type="text" name="address" id="address"/><br/>
内容:<textarea id="content" name="content" id="content"></textarea><br/>
<input type="button" id="button" value="请求数据"/>
</form>
<div id="json"></div>
<script type="text/javascript">
$(function(){
$("#button").bind("click", function(){
var data = {
username: $("#username").val(),
sex: $("#sex").val(),
age: $("#age").val(),
sex: $("#sex").val(),
email: $("#email").val(),
address: $("#address").val(),
content: $("#content").val()
}
$.ajax({
url: "test.json",
type: "get",
data: data,
dataType: "json",
success: function(data, textStatus){
var htmlStr = "";
$.each(data, function(index, info){
htmlStr+="姓名:"+info['name']+"<br/>";
htmlStr+="性别:"+info['sex']+"<br/>";
htmlStr+="邮箱:"+info['email']+"<br/><br/>";
});
$("#json").html(htmlStr);
}
})
});
});
</script>
</body>
</html>
使用格式:form表单jQuery包装集对象.serialize()
作用:序列化收集表单内容
注意:表单中的input的name将作为属性名,value将作为属性值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<form id="testForm" action="">
用户名:<input type="text" name="username" id="username"/><br/>
性别:<input type="text" name="sex" id="sex"/><br/>
年龄:<input type="text" name="age" id="age"/><br/>
邮箱:<input type="text" name="email" id="email"/><br/>
地址:<input type="text" name="address" id="address"/><br/>
内容:<textarea id="content" name="content" id="content"></textarea><br/>
<input type="button" id="button" value="请求数据"/>
</form>
<div id="json"></div>
<script type="text/javascript">
$(function(){
$("#button").bind("click", function(){
var data = $("#testForm").serialize();
console.log(data);
$.ajax({
url: "test.json",
type: "get",
data: data,
dataType: "json",
success: function(data, textStatus){
var htmlStr = "";
$.each(data, function(index, info){
htmlStr+="姓名:"+info['name']+"<br/>";
htmlStr+="性别:"+info['sex']+"<br/>";
htmlStr+="邮箱:"+info['email']+"<br/><br/>";
});
$("#json").html(htmlStr);
}
})
});
});
</script>
</body>
</html>
七 、全局事件
概述:当发送ajax请求时会触发ajax全局事件
事件 | 参数 | 说明 |
---|---|---|
ajaxStart(callback) | 回调函数 | Ajax请求开始时触发该事件 |
ajaxSend(callback) | 回调函数 | Ajax请求发送前触发该事件 |
ajaxSuccess(callback) | 回调函数 | Ajax请求成功时触发该事件 |
ajaxError(callback) | 回调函数 | Ajax请求出现错误时触发该事件,其中捕获到的错误可以作为最后一个参数进行传递 |
ajaxComplete(callback) | 回调函数 | Ajax请求完成时触发该事件 |
ajaxStop(callback) | 回调函数 | Ajax请求结束时触发该事件 |
注意:在jQuery中,所有的全局事件都是以XMLHttpRequest对象和设置作为参数传递给回调函数,在处理回调函数时,只要分析其传回的参数值即可
使用场景:在jQuery当中使用Ajax获取异步数据时,会经常使用到ajaxStart和ajaxStop这两个全局事件。当请求开始时,会触发ajaxStart()方法的回调函数,往往用于编写一些准备性工作,例如提示“数据正在获取中……”;当请求结束时会触发ajaxStop()方法的回调函数,这一事件往往与前者相配合,说明请求的最后进展状态,例如网站中获取图片的速度较慢,在图片加载过程中可以给用户提供一些友好的提示和反馈信息,常用的提示信息为“图片加载中……”,待图片加载完毕后隐藏该提示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#loading{ background-color:#eee; border:solid 1px #999; margin:5px 0 10px; padding:5px; font-size:13px; display: none;}
</style>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="loading">Loading.....</div>
<button type="button" id="button">请求数据</button>
<div id="json"></div>
<script type="text/javascript">
$(function(){
$(document).ajaxStart(function(){
$("#loading").show();
});
$(document).ajaxStop(function(){
$("#loading").slideUp(1000);
});
$("#button").bind("click", function(){
$.ajax({
url: "test.json",
type: "get",
success: function(data, textStatus){
var htmlStr = "";
$.each(data, function(index, info){
htmlStr+="姓名:"+info['name']+"<br/>";
htmlStr+="性别:"+info['sex']+"<br/>";
htmlStr+="邮箱:"+info['email']+"<br/><br/>";
});
$("#json").html(htmlStr);
}
});
});
});
</script>
</body>
</html>