jQuery中异步交互技术详细指南

http://www.blogjava.net/absolutedo/archive/2009/10/29/300279.html

                                                                                                                                                          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请求。(因为将使用DOMscript标签来加载)

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,dataTypescript时默认为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返回的原始数据的进行预处理的函数。提供datatype两个参数:dataAjax返回的原始数据,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请求。(因为将使用DOMscript标签来加载)

"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=?"这种GETPOST请求中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:

功能描述:在登陆页面,异步检验用户提交的数据(用户名和密码)是否正确,返回相应的信息到登陆页面中idmessageDIV中,该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");//
设置idmessageDIV(以下注释称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中提供的异步交互功能了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值