1. 插件: 也称组件

什么是: 拥有专属的HTML,CSS和js的独立页面区域

为什么: 重用!

何时: 只要一个功能/区域可能被反复使用时

如何:

3个来源:

1. 官方插件:jquery ui

依赖于jQuery, 必须先引入jQuery,再引入jQuery UI

如何:

1. 引入jQuery UI的css

2. 按组件的要求,自行编写HTML结构和内容

3. 引入jQuery.js, 再引入jQuery UI.js

4. 查找插件的父元素,调用jQuery UI的插件函数

$(插件的父元素).插件函数()

侵入性: 插件根据自己的需要,自动添加样式类或自定义扩展属性

2. 第三方插件:

3. 自定义插件:

定义:

前提: 已经用HTML,CSS,JS实现了插件的效果和功能

1. 将插件的CSS提取出来,保存在一个独立的css文件

要求: 为了避免和其他插件存在相同的样式类发生冲突,必须保证每个样式类都要以统一的插件类名作为前缀!

2. 定义插件的js: 向jQuery的原型对象中添加自定义插件函数

jQuery.fn.插件函数=function(){

//this->$(父元素)

//2件事:

//1. 侵入class:

//2. 绑定事件处理函数:

}//调用时: $(父元素).插件函数();

使用插件: 同使用jQueryUI的做法

1. 引入插件的css

2. 按照插件要求编写html

3. 引入jquery.js和插件.js

4. 查找插件父元素,调用插件函数

2. ajax:

$.ajax({

url:"服务端接口地址",

type:"get/post",

data:{ 参数1:值1, ... },

dataType:"json", //可自动将服务器返回的json字符串转为对象

success:function(res){//onreadystatechange 返回响应,且响应成功时自动触发

//res会自动获得服务端返回的数据

//用res执行DOM操作

}

})//jquery 3.x 支持Promise

.then(function(res){

})

3. 跨域:

什么是: 一个域名下网页,向另一个域名下发送请求,请求另一个域名下的资源

比如: 现在在http://localhost/index.html下

<script src="http://www.jquery.com/jquery.js"

<img src="http://tmooc.cn/stylesheet/img/logo.png"

<link rel="stylesheet"

href="http://v4.bootcss.com/bootstrap.css"

问题: ajax的xhr对象,禁止发送跨域请求

包括:

1. 一级域名不同: www.a.com    ->      www.b.com

2. 二级域名不同: oa.tedu.com   ->      hr.tedu.com

3. 端口不同: localhost:5500      ->   localhost:3000

||

4. 协议不同: http:localhost      ->   https:localhost

80                   443

5. 即使同一台机器: 域名   ->   IP

localhost   127.0.0.1

如何发送异步跨域请求:

1. JSONP: JSON with Padding 填充式json

问题1: ajax不能发送跨域请求

解决1: 请<script>元素帮助发送请求

问题2: <script>发送请求,必须返回一条可执行的js语句

解决2: 修改服务端res.write(),其中,将要返回的数据,填充进一条可执行的js语句中,一起返回。

问题3: 服务端返回的js语句是写死的,众口难调

解决3: 在客户端定义一个处理函数

function show(res){

//对res执行任何想要的操作

}

服务端返回一条函数调用语句,函数名必须和客户端定义的函数名保持一致:

res.write(`show('${weather}')`)

返回: show('晴 -10~-2 from dong')

在客户端执行时:

调用show函数:

参数res自动得到了'晴 -10~-2 from dong'

实现了: 客户端操作与服务端的分离

问题4: 服务端将函数名规定死,也是众口难调

解决4: 客户端发送:

<script src="url?callback=客户端函数名"

服务端:

先获得req中callback变量中的函数名

再将函数名拼接到res.write()中,代替写死的函数名

实现了: 处理逻辑和函数名与服务端无关

问题5: <script>在客户端只写死一次,仅能在首次加载页面时执行一次,无法反复发送请求

解决5: 动态添加<script>元素

在单击事件中:

$('<script src="http://localhost:3000?callback=doit">').appendTo("body");

问题6: 新增的<script>无法自动删除,造成积压

解决6: 在自定义的回调函数结尾,查找最后一个script,删除。

其实: $.ajax可自动实现jsonp效果:

$.ajax({

url:"url",

... : ... ,

dataType:"jsonp", //使用jsonp方式请求服务端

success:function(res){ ... }

})

原理: 同以上6步:

1. 动态创建script元素发送请求

2. 自动为success匿名函数定义随机函数名拼接到url?callback=随机函数

3. success函数执行后,自动删除script元素

强调:jsonp单靠客户端无法实现,必须服务端负责拼接函数名和要返回的数据。所以必须客户端服务端同时修改才可支持。

jQuery的插件和跨域、ajax的更多相关文章

  1. 用JQuery的$.getJSON发起跨域Ajax请求

    jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callba ...

  2. jQuery插件select2跨域设置xhrFields参数

    ajax跨越时默认不带cookie,如果需要带cookie调用,需要设置参数 xhrFields: { withCredentials: true },如: $.ajax({url : "h ...

  3. 第二百七十四节,同源策略和跨域Ajax

    同源策略和跨域Ajax 什么是同源策略  尽管浏览器的安全措施多种多样,但是要想黑掉一个Web应用,只要在浏览器的多种安全措施中找到某种措施的一个漏洞或者绕过一种安全措施的方法即可.浏览器的各种保安措 ...

  4. 使用$.getJSON实现跨域ajax请求

    jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callba ...

  5. 前端 - jsonp 跨域ajax

    jsonp 跨域ajax原理: 浏览器同源策略限制 如何解决同源策略限制: 方式一: 利用创建script块,在其中执行src属性为 远程url 异域 用函数(返回值) 的形式返回参数 方式二: jq ...

  6. Ajax与跨域Ajax

    Ajax 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上.对于传统的Web应用,一个简单操作需 ...

  7. 06: AJAX全套 & jsonp跨域AJAX

    目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...

  8. 跨域Ajax -- jsonp和cors

    跨域Ajax - jsonp - cors 参考博客: http://www.cnblogs.com/wupeiqi/articles/5703697.html http://www.cnblogs. ...

  9. 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置

    1. 无关Cookie跨域Ajax请求 客户端 以 Jquery 的 ajax 为例: $.ajax({ url : 'http://remote.domain.com/corsrequest', d ...

随机推荐

  1. 微信小程序 POST传值跳坑

    来源:https://www.cnblogs.com/ordinaryk/p/8430462.html 加这个就行了: header : { 'content-type': 'application/ ...

  2. Android--sos闪光灯

    Camera camera = null; Parameters parameters = null; Handler handler = new Handler() { @Override publ ...

  3. thinkphp--多表查询

    我们可以将两个表连起来一起查询数据,我现在有两张表,一个是feedback表和member表,如图: 总目录: 上代码: $where = array(); $"; $Model = M(' ...

  4. 给动态ajax添加的元素添加click事件

    $(document).on('click','div',function(){alert(1)}); .live()方法也是可以的

  5. 理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos

    理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos Cheap Paxos Message flow: Cheap Multi-Paxos Fast Paxos ...

  6. 【Linux常见命令】diff命令

    diff - compare files line by line diff命令用于比较文件的差异. diff以逐行的方式,比较文本文件的异同处. 如果指定要比较目录,则diff会比较目录中相同文件名 ...

  7. 《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——2.4 双路组相联高速缓存...

    本节书摘来自异步社区<现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)>一书中的第2章,第2.4节,作者:[美]Curt Schimmel著,更多章节内容可以访问云 ...

  8. 网络流--最大流--POJ 1273 Drainage Ditches

    链接 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clov ...

  9. 【NOI Online 2020】入门组 总结&&反思

    前言: 这次的NOI Online 2020 入门组我真的无力吐槽CCF的网站了,放段自己写的diss的文章,供一乐 如下:(考试后当天晚上有感而发) 今天是个好日子!!!(我都经历了什么...... ...

  10. centos7 安装高版本svn

    一.安装高版本svn 1.创建一个新的yum库文件,vim /etc/yum.repos.d/wandisco-svn.repo 内容如下 [WandiscoSVN] name=Wandisco SV ...