jQuery深入——动画、常用工具、JSON、Ajax

news/2024/7/11 1:07:55 标签: json, ajax, jQuery, 跨域, XHR

一、jQuery动画

0x1 显示和隐藏元素

1、带特效的显示隐藏

  • show(duration[, easing][, callback])
  • hide(duration[, easing][, callback])
  • toggle(duration[, easing][, callback])
    duration 过渡时间,fast(200ms)、normal(400)、slow(600)
    easing 切换效果speed、linear、swing
    callback 回调函数

2、通过透明度显示和隐藏

  • fadeIn(duration[, easing][, callback])
  • fadeOut(duration[, easing][, callback])
  • fadeToggle(duration[, easing][, callback])
  • fadeTo(duration, opacity[, easing][, callback])
    opacity透明度,0-1,最终的透明度

3、上下折叠显示隐藏

  • slideDown(duration[, easing][, callback])
  • slideUp(duration[, easing][, callback])
  • slideToggle(duration[, easing][, callback])

4、停止动画
- stop([stopAll [, goToEnd]])
stopAll 布尔值,规定是否停止被选元素的所有加入队列的动画。默认是 false。
goToEnd 布尔值,规定是否立即完成当前的动画。默认是 false。
- finish([queue])
- jQuery.fx.off 全局动画开关
Finish ():所有的堆栈动画直接结束
stop (true, true):阻止当前的动画

5、自定义动画

  • jQuery Easing 插件
    https://github.com/gdsmith/jquery.easing
  • animate(properties[[, duration][, easing]][, callback])
    properties 最终的CSS样式

二、jQuery常用工具

0x1 和其他库一起使用

jQuery.noConflict(jqueryPropertyToo)
- noConflict() 方法会释放会 使varjq= 标 识 符 的 控 制 , 这 样 其 他 脚 本 就 可 以 使 用 它 了 − 可 以 创 建 自 己 的 简 写 v a r j q = .noConflict(true);

0x2 处理JS对象和集合

1、判断浏览器兼容性

  • $.support 返回支持的功能
  • https://modernizr.com/ 第三方库专门做的事情

2、移除字符串两侧的空白字符

  • $.trim(value) 返回新值,不改变字符串本身
var str = '   hello world   '
var newStr = $.trim(str)

3、遍历属性和集合
- $.each(collection, callback)

 $.each(arr, function (index, value) {
            if (index === 1) {
                return true;  //类似于continue
            }
        })

4、过滤数组

  • $.grep(array, callback[, invert])
    callback不能是正则表达式,可以在函数中声明
var arr = [1, 3, 6, 13, 38, 9, 8, 24, 15];
var arr2 = $.grep(arr, function (value, index) {  //这里传参是值、索引
    return value > 10;
})

5、转换数组

  • $.map(collection, callback)
var arr = [1, 2, 3, 4, 5];
var arr2 = $.map(arr, function (value, index) {
    return value + 1;
    //return null; 返回null空数组
    // return ''; 返回空格数组
})

6、更多数组操作方法

  • $.inArray(value, array) 返回值在数组中的下标
console.log($.inArray(2, [1, 2, 3, 4, 5]));
  • $.makeArray(object) 将类数组对象转换为数组
var arrayLikeObject = {
    0: 'a',
    1: 'b',
    2: 'c',
    length: 3
}
console.log($.makeArray(arrayLikeObject));
  • $.merge(array1, array2) 合并数组,将数组2合并至1
var arr1 = [0, 1, 2]
var arr2 = [3, 4, 5]
$.merge(arr1, arr2);

7、对象操作

  • 扩展对象 $.extend([deep,] target, [source1, source2, … sourceN])
var target = { a: 1, b: 2, c: 3 };
var source1 = { c: 4, d: 5, e: 6 };
var source2 = { c: 7, e: 8, f: 9 };
$.extend(target, source1, source2)  //将1、2合并到target
var mergedObj = $.extend({}, source1, source2) //将1、2合并为新对象
var target = { a: 1, b: 2 };
var source1 = { b: { b1: 2.1, b2: 2.2 }, c: 3 };
var source2 = { b: { b3: 2.3, b4: 2.4 }, d: 4 };
console.log($.extend(target, source1, source2));  //b: { b1: 2.1, b2: 2.2 }被覆盖
console.log($.extend(true, target, source1, source2)); //deep设置为true 合并b
  • 获取对象类型 $.type(param)

7、其他工具方法

  • $.noop() 函数是一个空函数,此方法不接受任何参数
  • $.contains(container, contained) 判断节点是否包含关系
  • $.error(string) 抛出错误详细相关信息

ajax与json">三、Ajax与Json

ajax">0x1 Ajax

1、AJAX 带来了什么

  • 无刷新获取数据,用户体验有保障
  • 数据不包装,方便快捷,节省流量
  • CORS 方案带来更加强大的跨域能力

2、AJAX 本质

  • XMLHTTPRequest 对象
  • 由宿主环境提供
  • 是一种更便捷的获取数据方式

3、创建一个 AJAX 请求

第一步 创建 XMLHTTPRequest 对象

  • 创建一个 XMLHTTPRequest(XHR) 对象
  • 使用 XHR 对象的方法向服务器发送请求
  • 注意不同浏览器的兼容性

第二步 绑定 onreadystatechange 事件

  • XHR 对象的 readyState 有 5 种状态
    • 1) 未发送 0
    • 2) 使用了 open 方法 1
    • 3) 使用了 send 方法且响应头已经接收 2
    • 4) 下载数据 3
    • 5) 操作完成或失败 4
  • 根据 XHR.readyState === 4 判定是否请求成功

第三步 通过回调处理业务逻辑

  • 可通过 HTTP 状态码判定服务端是否成功响应数据
    • 1) 响应正常 200
    • 2) 请求错误 4XX
    • 3) 服务器错误 5XX
    • 4) 重定向 301
    • 5) HTTP 缓存命中 304

Demo

<body>
  <button id="btn">获取数据</button>
  <pre id="store"></pre>
  <script>
  var btn = document.getElementById('btn'),
    store = document.getElementById('store')
  btn.addEventListener('click', ajax)
  function ajax () {
    var src = './data.json'
    var xhr = new XMLHttpRequest() //第一步 创建对象
    xhr.open('GET', src)   //发送请求
    xhr.onreadystatechange = loadData  //绑定 onreadystatechange 事件
    xhr.responseType = 'json'
    xhr.send()
    function loadData () {
      if (xhr.readyState === 4 && xhr.status === 200) {  //结合状态码判定是否请求成功
        store.innerHTML = JSON.stringify(xhr.response, null, 2)
      }
    }
  }
  </script>
</body>

4、XHR对象方法

  • open 方法
    指定请求的 Method 和 URL
    第三个参数设置为 false 可实现同步数据请求

  • send 方法
    调用 send 方法后才会发起请求
    POST 的数据需要通过 send 方法发送
    除字符串之外还可以发送复杂类型数据

    • abort 方法
      舍弃一个请求
      readyState 会被置 0 但不触发 readystatechange 事件
      请求还是会送到服务器,仅仅是客户端“视而不见”

    • setRequestHeader 方法
      设置请求头,同字段多次设置时,值会合并到一个字段中
      必须在 open 与 send 方法执行顺序中间调用
      默认的 Accept 字段值为 “/

    • getResponseHeader 方法
      获取响应头内容,参数接受响应头字段名,返回字段值
      字段名忽略大小写
      多个同名字段存在时,多个值以逗号+空格连成一个

    • timeout 属性
      设置超时时间,毫秒为单位
      超时后会触发 timeout 事件
      IE 中,超时必须在 open 方法后,send 方法前设置

    • status 属性
      初始 status 为 0,接收响应头后为标准的 HTTP 状态码
      如果响应头中没有设置状态码,则默认为 200
      XHR 出错时,status 也为 0

    • upload 属性
      返回一个 XMLHTTPRequestUpload 对象
      可通过绑定事件侦听上传过程

    • responseType 属性
      设置响应内容的格式类型,默认字符串
      可设置多种格式:json、blob、arraybuffer 等
      设置后会影响 response 的值

    • response 属性
      响应的正文内容
      默认为字符串,但会被 responseType 影响

5、XHR2.0的CORS跨域方案

  • 跨域是什么
    不同域名
    不同端口
    不同协议
    跨域情况下,AJAX 请求会报错

  • CORS 跨域方案
    XMLHTTPRequest Level 2 中加入
    需要服务器配合设置响应头
    可选择是否带上 cookie

  • 简单请求与复杂请求
    复杂请求会先发送一次 OPTIONS 方法的预检请求
    简单请求需要同时满足的条件:

    • 请求 Method 必须为 HEAD、GET、POST 之一
    • 请求头中的字段不超过 Accept,Accept-Language
    • Content-Language,Last-Event-ID,Content-Type
    • Content-Type 只限于三个值 application/x-www-formurlencoded、multipart/form-data、text/plain

6、服务端响应头字段设置

  • Access-Control-Allow-Origin

    • 表示允许访问的域名
    • 必须在响应头中设置该字段
    • 可使用 * 表示允许任意域名
  • Access-Control-Allow-Credentials

    • 值设置为 true 表示允许向服务器发送 cookie
    • 客户端需要设置 XHR 对象的 withCredentials 为 true
    • Access-Control-Allow-Origin 必须设置为指定域名
  • Access-Control-Expose-Headers

    • 表示允许客户端通过 getResponseHeader 方法获取的字段
    • CORS 方式下该方法默认只能获取 6 个基础字段
      • Cache-Control
      • Content-Language
      • Content-Type
      • Expires
      • Last-Modified
      • Pragma
  • Access-Control-Allow-Methods

    • 表示服务端接受的跨域请求方法
    • 多个方法用逗号分隔
    • 必须在预检响应头中设置该字段
  • Access-Control-Allow-Headers

    • 表示服务端接受的跨域请求的字段
    • 多个字段名用逗号分隔
    • 请求头含 Access-Control-Request-Headers 时为必须
  • Access-Control-Max-Age

    • 服务端响应头字段设置
    • 表示缓存预检结果
    • 以秒为单位
    • 在此期间不再发送预检请求

ajax方法">0x2 jQuery中的ajax方法

1、全局配置
$.ajaxSetup 方法可以设置全局配置

  • 全局配置会作为下次 ajax 方法的默认参数
  • 全局配置可以被 ajax 方法的配置覆盖
  • 全局配置适用于所有基于 ajax 方法的衍生方法

2、全局回调

  • 所有 ajax 方法默认执行全局回调
  • 可通过配置参数关闭单个 ajax 方法不执行全局回调
  • 全局回调无法被 ajax 方法中的配置项覆盖

json">0x3 JSON

1、数据格式

  • JSON 全称 JavaScript Object Notation
  • 通过键值对存储数据
  • JSON 不是 Javascript 的子集
    • JSON 可以包含 U+2028 和 U+2029,JS 字符串不能

2、数据格式的优势

  • 数据结构更加简化,不需要成对标记
  • 对象查找方式比 DOM 结构化查找快速
  • 更丰富的数据类型

3、数据格式限制

  • 以 { 起始,} 结束
  • 双引号包裹键名
  • JSON 字符串中不可添加注释

4、JS 中如何使用 JSON 数据

  • JSON 数据本质上是一个字符串
  • 可以通过 eval、JSON.parse 等方式转化为对象
  • 注意使用 try catch

5、其他语言中如何使用 JSON 数据

  • 很多语言都内置了 JSON 的包、模块或函数
  • 从数据库/缓存等数据源中取出 JSON 数据格式
  • 转化为可用的对象或直接使用

json对象">0x4 JSON对象

1、Json对象

  • parse 方法和 stringify 方法调用时注意 try catch
  • 除了低版本 IE(6、7),兼容性很好
  • 可以将对象与 JSON 数据格式互相转化

2、JSON.parse 方法

  • 将 JSON 数据格式转化为对象
  • 第二个参数接受一个过滤函数
  • 注意去除数据中的尾逗号
  • 不能获取变量

3、JSON.stringify 方法

  • 将对象转化为 JSON 数据格式
  • 第二个参数接受一个过滤函数
  • 第三个参数接受一个缩进格式

http://www.niftyadmin.cn/n/814166.html

相关文章

上基础班有感

上基础班有感 作者 会敲代码的小白 首先声明下&#xff0c;我来黑马是为了学好技术&#xff0c;然后找个好的工作来的&#xff0c;我相信大多数的人来黑马也抱着和我相同的目的。我来的时候稍微有点迟&#xff0c;如果来的早点的话就可以直接进刚开的基础班&#xff0c;所以现…

【c/c++】算法的时间复杂度和空间复杂度

原文地址&#xff1a;http://blog.csdn.net/zolalad/article/details/11848739 算法的时间复杂度和空间复杂度-总结 通常&#xff0c;对于一个给定的算法&#xff0c;我们要做 两项分析。第一是从数学上证明算法的正确性&#xff0c;这一步主要用到形式化证明的方法及相关推理模…

单例模式的五种写法

单例模式的五种写法 懒汉式&#xff0c;线程不安全 当被问到要实现一个单例模式时&#xff0c;很多人的第一反应是写出如下的代码&#xff0c;包括教科书上也是这样教我们的。 public class Singleton { private st…

移动端左侧导航的实现

一、实现效果 主页&#xff1a; 点击导航键&#xff1a; 二、实现方案 0x1 CSS3javascript方案 1、实现思路 利用css3的transform变换 translate(x,y)&#xff0c;translatex() translatey() transition过渡 <’ transition-property ‘>&#xff1a;检索…

CSS度量单位rem、em、vw、vh详解

CSS度量单位rem、em、vw、vh详解 单位说明兼容性em相对长度单位&#xff0c;相对于当前对象内文本的字体尺寸&#xff0c; 根据父元素的大小变化而变化良好rem相对长度单位&#xff0c;相对于跟元素&#xff08; 即 html 元素&#xff09;font-size 的倍数&#xff0c; 不会被…

【c/c++】#pragma once 与 #ifndef 的区别解析

原文地址&#xff1a;http://blog.csdn.net/hkx1n/article/details/4313303 作用&#xff1a;为了避免同一个文件被include多次&#xff0c;C/C中有两种方式&#xff0c;一种是#ifndef方式&#xff0c;一种是#pragma once方式。 在能够支持这两种方式的编译器上&#xff0c;二者…

【计算机基础】VS2010快捷键操作

】VS2010对汉字的拼写检查后留下的红色波浪线 我经常用中文进行注释&#xff0c;这样浏览代码的时候就大片的红线看着不舒服 第一种方法&#xff0c;就是直接在中文后面添加分号。还是不行就多加几个 第二种方法&#xff1a; 在VAssistX菜单栏->Visual Assist X Options-&g…

iOS开发:iOS中图片与视频一次性多选 - v2m

一.使用系统的Assets Library Framework这个是用来访问Photos程序中的图片和视频的库。其中几个类解释如下  ALAsset    ->包含一个图片或视频的各种信息 ALAssetRepresentation    ->得到ALAsset的各种信息 ALAssetsFilter    ->用来从一个ALAssetsGro…