Ge,Kunjin
在积极备战SVT-PortalONE项目之前,听说项目中的js框架用的是jQuery,主要可能用到jQuery中提供的异步交互技术和jQuery开源提供的UI,趁此机会总结、分享一下自己学习jQuery提供的ajax技术的经验,在本文的最后,我会提供几个学习过程中编写的代码示例供大家参考、学习!
在jquery-1.3.1提供的API中,最完整的方法是jQuery.ajax(options),同时她也是jQuery底层AJAX实现,简单容易的高层实现大家可以看下API中提供的jQuery.get(options)、jQuery.post(options),以及配合JSON做为传输数据格式的方法jQuery.getJSON(options).下面我主要针对jQuery提供的API为大家详细讲解下jQuery.ajax(options)方法(PS:在学习其提供的API过程,需要特别注意的地方我用红色、加粗进行提示)
jQuery.ajax(options):
功能描述
通过 HTTP 请求加载远程数据。
$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。
$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。
详细参数选项见下
注意:
1:如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。
2:如果dataType设置为"script",那么在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
jQuery 1.2 中,我们可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。
返回值
XMLHttpRequest
参数
options (可选) : AJAX 请求设置。所有选项都是可选的。
选项
async (Boolean) : (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
beforeSend (Function) : 发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。这是一个Ajax事件。如果返回false可以取消本次ajax请求。
function (XMLHttpRequest) {
this; // 调用本次AJAX请求时传递的options参数
}
cache (Boolean) : (默认: true,dataType为script时默认为false) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。
complete (Function) : 请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象和一个描述成功请求类型的字符串。
function (XMLHttpRequest, textStatus) {
this; // 调用本次AJAX请求时传递的options参数
}
contentType (String) : (默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。
data (Object,String) : 发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value(键值对)格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。
dataFilter (Function) :给Ajax返回的原始数据的进行预处理的函数。提供data和type两个参数:data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。
function (data, type) {
// 对Ajax返回的原始数据进行预处理
return data // 返回处理后的数据
}
dataType (String) : (默认值:智能判断xml或者html)预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,
可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。注意:在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
"json": 返回 JSON 数据。
"jsonp": JSONP 格式。使用 JSONP形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
error (Function) : (默认: 自动判断 (xml 或 html)) 请求失败时调用时间。参数有以下三个:XMLHttpRequest 对象、错误信息、(可选)捕获的错误对象。如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能是"timeout", "error", "notmodified" 和 "parsererror"。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常 textStatus 和 errorThrown 之中
// 只有一个会包含信息
this; // 调用本次AJAX请求时传递的options参数
}
global (Boolean) : (默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 可用于控制不同的AJAX事件。
ifModified (Boolean) : (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。
jsonp (String) : 在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。
password (String) : 用于响应HTTP访问认证请求的密码
processData (Boolean) : (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。
scriptCharset (String) : 只有当请求时dataType为"jsonp"或"script",并且type是"GET"才会用于强制修改charset。通常在本地和远程的内容编码不同时使用。
success (Function) : 请求成功后的回调函数。参数:由服务器返回,并根据dataType参数进行处理后的数据;描述状态的字符串。
function (data, textStatus) {
// data 可能是 xmlDoc, jsonObj, html, text, 等等...
this; // 调用本次AJAX请求时传递的options参数
}
timeout (Number) : 设置请求超时时间(毫秒)。此设置将覆盖全局设置。
type (String) : (默认: "GET") 请求方式 ("POST" 或 "GET"),默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
url (String) : (默认: 当前页地址) 发送请求的地址。
username (String) : 用于响应HTTP访问认证请求的用户名,配合password (String) 一起使用哈。
xhr (Function) : 需要返回一个XMLHttpRequest 对象。默认在IE下是ActiveXObject 而其他情况下是XMLHttpRequest 。用于重写或者提供一个增强的XMLHttpRequest 对象。这个参数在jQuery 1.3以前不可用。
下面是我学习过程中编写代码:
演示DEMO 1st:
功能描述:在登陆页面,异步检验用户提交的数据(用户名和密码)是否正确,返回相应的信息到登陆页面中id为message的DIV中,该DIV的初始状态为隐藏的,前后台返回提示信息的过程采用滑动的动画效果进行展示,展示一定的时间(setTimeout 定时器)后自动的滑动隐藏!
PS:由于本帖主要是给大家讲解jQuery中异步交互技术,后台的逻辑在这里就不给大家写了,后台代码业务逻辑、持久层逻辑在这里就不详细展示了,需要帖中的demo源文件的,可以RTX密下我。
演示截图:因为动画的过程很难以静态图片展示,所以我把窗口的边缘截了一角,大家注意窗口与登陆框的距离
Picture 1 登陆前
Picture 2 未输入用户或密码 登陆框与窗口上部边缘的距离变长了,变化的过程是动态的向下滑动,很酷的
Picture 3 恢复后的窗口呈现 恢复了以往的平静
Picture 4 输入错误的用户名和密码 大家继续看登陆框与窗口上部边缘的距离
Picture 5 输入正确的用户名 提示登陆成功
代码展示:
登陆页面代码:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jQuery-登陆验证</title> <!-- 引进jQuery核心js -->
<script type="text/javascript" src="js/jquery-1.3.1.js"></script> <script type="text/javascript">
$(document).ready(function(){
$("#button").click(function(){
var username=$("#username").val();
var password=$("#password").val();
if(username==""||password=="")//用户未输入用户名或密码
{
$("#message").slideDown("slow");//设置id为message的DIV(以下注释称DIV)以slow的速度慢慢向下滑动
$("#message").show();//设置DIV显现
$("#message").css("border-color","red");//设置DIV的边框颜色
$("#message")[0].innerHTML='<font color="red">Please enter username or password!</font>';//设置提示信息
setTimeout('back()',2000); //设置定时器,2秒后调用函数back
return;
} //用户输入用户和密码,对用户输入的数据进行异步检验
$.ajax({
type:"POST", //异步请求方式
data:"username="+username+"&password="+password, //传递的数据
url:"login.do?method=login", //请求路径 请求Action(继承DispatcherAction)中的login方法
success:show //异步请求成功后的回调函数
})
})
})
//DIV展示信息一段时间后调用的函数
function back()
{
$("#message")[0].innerHTML=' ';
$("#message").slideUp('slow');
$("#message").hide();
}
//回调函数
function show(response)
{
$("#message")[0].innerHTML='<font color="'red"'>'+response.firstChild.firstChild.nodeValue+'</font>';
$("#message").slideDown('slow');
$("#message").show();
setTimeout('back()',2000);
}
</script> </head>
<body>
<form>
<table width="80%" align="center" border="0">
<tr>
<td align="center" colspan="2">
<div id="message" style="display: none;width: 500px;height: 50px;border: 1px ">
</div>
</td>
</tr>
<tr>
<td width="40%" align="right">username:</td>
<td width="*"><input type="text" name="username" id="username" style="width: 100px;height: 20px"/></td>
</tr>
<tr>
<td align="right">password:</td>
<td><input type="password" name="password" id="password" style="width: 100px;height: 20px"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="button" id="button" value="submit" /></td>
</tr>
</table>
</form>
</body></html>
演示DEMO 2nd:
功能描述:异步加载并去执行一个js,在demo2.jsp中点击按纽触发异步请求。
演示截图:
Picture 1:展示demo2.jsp中的内容
Picture 2:点击按钮后,加载并执行js,并把被请求js的文本内容打印
代码展示:
demo2.jsp
<%@ page language="java" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jQuery-异步加载并执行一个js文件</title>
<script type="text/javascript" src="js/jquery-1.3.1.js"></script>
<script type="text/javascript">
//加载并去执行一个js
$(function(){
$("#button").click(function(){
var result='请求结果:';
jQuery.ajax({
type:"POST",
url:"js/test.js",
dataType:"script",
error:function(XMLHttpRequest,textStatus,errorThrown)
{
result+=textStatus;
alert(result);
},
success:function(data,textStatus)
{
result+=textStatus;
alert(result);
}
})
})
})
</script> </head>
<body>
<center>
<input type="button" id="button" value="Click me!" />
</center>
</body>
</html>
text.js
alert('hello,chinasoft resource!');
好了,这两个简单的sample结合上面分析API,应该能够帮助大家概要简单的认识下jQuery中提供的异步交互功能了。
标签:jQuery,异步,XMLHttpRequest,交互技术,function,message,请求 From: https://blog.51cto.com/u_16065168/6445522