首页 > 其他分享 >jQuery中异步交互技术详细指南

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

时间:2023-06-09 10:01:53浏览次数:42  
标签:jQuery 异步 XMLHttpRequest 交互技术 function message 请求


                                                                                                                                                          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 登陆前

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

Picture 2  未输入用户或密码 登陆框与窗口上部边缘的距离变长了,变化的过程是动态的向下滑动,很酷的

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

Picture 3  恢复后的窗口呈现 恢复了以往的平静

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

Picture 4  输入错误的用户名和密码   大家继续看登陆框与窗口上部边缘的距离

jQuery中异步交互技术详细指南_数据_04

Picture 5 输入正确的用户名     提示登陆成功

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

代码展示:

登陆页面代码:

<%@ 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中的内容

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

Picture 2:点击按钮后,加载并执行js,并把被请求js的文本内容打印

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

代码展示:

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

相关文章

  • Java 的 8 种异步实现方式
    异步的八种实现方式线程ThreadFuture异步框架CompletableFutureSpring注解@AsyncSpringApplicationEvent事件消息队列第三方异步框架,比如Hutool的ThreadUtilGuava异步1.线程异步public class AsyncThread extends Thread {    @Override    public vo......
  • jQuery 事件绑定方法 bind
    jQuery事件绑定方法(bindhovertogglelive....)、删除事件方法(unbind,die)及事件对象事件绑定方法:1.<type>(function)$("button").click(function(){...});2.bind(map)$("input[type='text']").bind({focus:function(){.......
  • element-ui中Select 选择器异步加载下一页
    场景当我们使用Select选择器存放大量数据的时候。会发现存在这么2个问题。1.接口响应时间较长。(因为数据量较多,一次查询的所有)甚至有可能超时。2.前端下拉框滑动卡顿。这个时候们如何解决上面面临的问题呢?有的小伙伴可能会说:1.分页加载。确实是可以解决问题。2.页面卡顿......
  • jquery:TypeError: $(...).on is not a function
    当发生错误TypeError:$(...).onisnotafunction时,当不存在javascript类冲突的前提下,考虑是否是因为jquery版本过低! 参考:http://stackoverflow.com/questions/15670352/typeerror-on-is-not-a-functionhttp://stackoverflow.com/questions/18958775/typeerror-jquery-on-is-n......
  • jquery Mobile点击显示加载等待效果
    点击某个按钮或链接时,触发等待加载效果:<script><!--$(document).bind("mobileinit",function(){});$(function(){//默认设置,一个小圈圈在转$('#default').live('tap',function(){$.mobile.loadingMessageTe......
  • jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><title></title>......
  • JQuery-XSS漏洞(CVE-2020-11022/CVE-2020-11023)
    JQuery-XSS漏洞(CVE-2020-11022/CVE-2020-11023)详细描述据NVD描述:在大于或等于1.2且在3.5.0之前的jQuery版本中,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给jQuery的DOM操作方法(即html()、.append()等),从而导致xss漏洞。受影响版本大于等于1.2,小于......
  • 异步调用方法并弹出处理中窗体(转载)---线程池的封装
    原文链接:[C#]非同步呼叫方法並跳出處理中視窗|愛流浪的小風-點部落(dotblogs.com.tw)前言 當我們在Winform進行某些比較花時間的運算時,若沒有使用非同步的方法來呼叫,畫面上的視窗就會顯示沒有回應,這是一種比較差的使用者體驗,可能會讓使用者以為當機了,在這邊為了方便......
  • fastapi 异步应用
    #定义一个专门创建事件循环loop的函数,在另一个线程中启动它defstart_loop(loop):asyncio.set_event_loop(loop)loop.run_forever()@app.get("/addr")defindex(adcode:str=None,address:str=None,level:str=None):importtimemessage={"......
  • 异步线程解决seata事务1000问题
    原因:seata1.5.0以下版本,事务执行sql超过1000,会抛出异常。解决方案:部分sql使用异步线程。实现方式:1、初始化异步线程池@Configuration@EnableAsyncpublicclassThreadAsyncConfigimplementsAsyncConfigurer{/***线程配置参数*/@Autowiredpr......