JQuery异步请求与Flask后端通信、this和event指针汇总

目录

一.JQuery与Flask通信的三种方法

1.1$.ajax()

1.2$.get()

1.3$.post()

二.forEach()方法

三.this指针

3.1为什么要用this指针

3.2this的指向

3.3this指针的四种绑定方式

3.3.1默认绑定

3.3.2隐式绑定

3.3.3显式绑定

3.3.4new绑定

3.3.5通过标签调用this指针函数

3.4this绑定的优先级

3.5特殊的绑定

 3.5.1忽略空值的绑定

3.5.2函数赋值同时调用函数(间接函数引用)

3.5.3箭头函数

四.event指针

4.1event指针介绍

4.2事件相关概念

 ​编辑

4.2.1事件流

4.2.2捕获阶段

4.2.3事件触发过程

4.2.4冒泡阶段

一.JQuery与Flask通信的三种方法

根据HTTP的“get”与“post”两种请求,JQuery提供“$.get()”、“$.post()”、“$.ajax()”三种方式通信。

1.1$.ajax()

使用$.ajax()可以很方便的与后端交换数据,不过当我们传入的数据是一个JS对象时,我们需要使用“JSON.stringify(object)”方法来将JS对象转换为JSON数据。

除此之外,我们还需要修改“请求头格式”为“application/json”,如果不修改请求头格式”,那么会报错:“415 (Unsupported Media Type)

而解决办法就是在$.ajax()中添加语句“contentType: "application/json;charset=UTF-8"

一个ajaxFlask后端传送数据的示例。

//发送数据
$.ajax({type:"post",dataType:"json",url:"/main/blog/commit/comment",contentType: "application/json;charset=UTF-8",data:JSON.stringify(data),
});

后端使用“request.json”获取字典对象来使用数据。

1.2$.get()

$.get()ajax使用get请求的简化版,在使用get请求向后端请求数据时,如果我们是这样的语句:

$.get("/main/blog/get/allcomment",{"blog_id":"123"},function(res){if(res.length == 0){//pass}
}

注意我们使用get请求的同时,附加了“blog_id”这个数据参数,这会改变我们get请求的URL,变成:"/main/blog/get/allcomment?blog_id=66",也就是说我们的请求参数自动作为修饰符添加到URL中。

此时,在后端Flask中,我们需要使用:“request.args.get("blog_id")”来获取“123


若数据参数有多个,例如:

{"test1":"123","test2":"456"
}

仍然使用“request.args.get("blog_id")”来获取对应值

1.3$.post()

$.postajaxpost请求简化版,需注意,传入的数据类型需要是JSON类型,在后端使用:“request.json”获取字典对象来使用数据。

例如:

二.forEach()方法

forEach()方法用来对一个数组中的所有成员执行方法内操作

例如:

let value = [1,2,3]
value.forEach(function(item){console.log(item);
});

效果:

三.this指针

3.1为什么要用this指针

this可以用来指向某些元素对象,在合适的地方使用this,可以减少无用代码的编写。

下面是一个冗余且不易维护的代码:

var user = {name: "aclie",sing: function () {console.log(user.name + '在唱歌')},dance: function () {console.log(user.name + '在跳舞')},study: function () {console.log(user.name + '在学习')},
}

在这个代码中,每个方法都需要用到user对象中的name属性,如果user对象名称发生变化,那么所有用到user的地方都要修改,在这种情况下,就可以使用this指针

var user = {name: "aclie",sing: function () {console.log(this.name + '在唱歌')},dance: function () {console.log(this.name + '在跳舞')},study: function () {console.log(this.name + '在学习')},
}

3.2this的指向

this指向(值)函数在哪里定义无关只与“如何调用”有关

 function foo(){console.log(this)
}foo()var obj = {foo: foo
}
obj.foo() obj.foo.apply("hello") 

执行结果:

3.3this指针的四种绑定方式

3.3.1默认绑定

当函数独立调用时,this指针默认绑定window

//1.直接调用函数
function f(){console.log(this);
}f();//2.对象中的函数
var obj1 = {f:f
}
var fn1 = obj1.f;
fn1();//3.被全局变量引用
var obj2 = {bar:function(){console.log(this);}
}
var fn2 = obj2.bar;
fn2();//4.函数嵌套调用
function f1(){console.log("f1",this);f2();
}
function f2(){console.log("f2",this);f3();
}
function f3(){console.log("f3",this);
}
f1();//5.通过闭包调用
var obj3 = {bar:function(){return function(){console.log(this);}}
}
obj3.bar()();

执行结果:

3.3.2隐式绑定

调用的对象内部有对函数的引用

(通过对象调用函数)

//通过对象调用函数
//注意区别“使用对象调用函数”与“直接调用对象中函数”两者区别
//前者是通过对象调用,故this指向该对象
//后者直接调用,故this指向window
var obj2 = {f:f
}
var myF = obj2.f
obj2.f();    //隐式调用,通过对象调用
myF();      //直接调用

执行结果:

注意:

将对象内的函数单独取出并且赋值给某个变量,通过这个变量来调用函数,就是“直接绑定”,this指针指向“window对象”。

直接通过对象调用这个函数,this指针指向“该对象”。

3.3.3显式绑定

不希望在对象内部包含这个函数的引用,但又希望通过对象强制绑定

(手动修改this指向)

使用call/apply/bind进行“显式绑定

function f(){console.log(this);
}var testV = {"name":"小明"
}f.call(testV)
f.apply(testV)
f.call("大明")

执行结果:

3.3.4new绑定

通过new关键字来创建构造函数的示例,绑定this

function animal(aName,aAge){this.aName = aName;this.aAge = aAge;
}const cat = new animal("小花",14);
const dog = new animal("大黄",15);console.log(cat);
console.log(dog);

执行结果:

总结:

在这里的this指针,跟Pythonn对象里的“self指针差不多,都是指向对象自身

3.3.5通过标签调用this指针函数

当某个标签调用某个含有this指针函数时,是默认绑定,故this指针指向window

(其实就是相当于单独在script标签中调用了函数,故是默认绑定)

可以将this指针传入,用来代指该标

    <button onclick="myclick1(this)">按钮1</button><button onclick="myclick2()">按钮2</button><script>function myclick1(e){console.log(e);}function myclick2(){console.log(this);}</script>

执行结果:

3.4this绑定的优先级

  • 隐式绑定高于默认绑定
  • 显示绑定高于隐式绑定
  • new绑定高于隐式绑定
  • new绑定高于显示绑定

绑定优先级

new关键字绑定 > 显式绑定 > 隐式绑定 > 默认绑定 

3.5特殊的绑定

除了上述四种常见绑定以外,还有三种“特殊的绑定规则”,少见,但是容易犯浑

 3.5.1忽略空值的绑定

当显式绑定的值为“null/undefined”时,this忽略显式昂定,转而绑定window

        var testV = {name:"小明",f:function f(){console.log(this);}}testV.f.call("123");testV.f.call(null);testV.f.call(undefined);

执行结果:

3.5.2函数赋值同时调用函数(间接函数引用)

间接函数引用相当少见(正常人不会写这种犯抽代码,某些面试官可能喜欢问用来装X)

        var testV1 = {name:"小明"};testV1.f = function (){console.log(this);};testV1.f();testV2 = {name:"大明"};(testV2.f = testV1.f)()

执行结果:

总结:

testV2在接收testV1的值(函数)时,添加了小括号,相当于赋值过程调用函数过程同时发生(并发过程),而在这个函数调用过程中,因为“赋值过程没有结束,而“函数又被调用”(此时因为是在内存中的函数被调用,而不是隐式绑定[例如:“testV1.f()”]),故被当做“默认绑定”由window调用this指针

3.5.3箭头函数

箭头函数不绑定this指针,它的this指针来源于上级作用域

        var testV = {name:"小明",f:() => {console.log(this);}};testV.f();

执行结果:

四.event指针

4.1event指针介绍

当事件(鼠标点击、键盘敲击等等)发生以后,会产生一个事件对象,作为参数传给监听函数。

    <button onclick="myclick1(event)">按钮</button><script>function myclick1(e){console.log(e);}</script>

点击按钮后,执行结果:

可以看出event是一个事件对象,在这里表示一个点击事件对象

4.2事件相关概念

要想学会event,我们还需要了解“事件流”、“捕获过程”、“事件触发过程”、“冒泡过程” 

 

一个完整的JS事件流是从window开始,最后回到window的一个过程。

事件流别分为三个阶段:“(1-5)捕获阶段”、“(5-6)事件触发过程”、“(6-10)冒泡阶段”。

4.2.1事件流

指页面中接受事件的顺序,即上图中的顺序。

4.2.2捕获阶段

在捕获阶段中,也可以通过“addEventListener(evnt,function,useCapture)”方法执行事件,在捕获阶段执行的元素,在冒泡阶段就不会在执行

addEventListener()定义与用法

  • document.addEventListener() 方法用于向文档添加事件句柄
  • 提示: 可以使用 document.removeEventListener() 方法来移除 addEventListener() 方法添加的 事件句柄
  • 提示:使用 element.addEventListener() 方法为指定元素添加事件句柄
参数描述
event必须。描述事件名称的字符串,例如“click”是点击事件
function必须。描述事件触发后执行的函数
useCapture可选。布尔值,true-事件句柄在捕获阶段执行,false-事件句柄在冒泡阶段执行

4.2.3事件触发过程

被点击位置最内层元素执行事件且准备向上传递事件句柄的过程

4.2.4冒泡阶段

当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window。

如果它的父级元素也有某个事件函数,当执行完它的事件函数后,也会执行它父级的事件函数

一个例子代码:

HTML部分

<div class="parents" id="parents"><div class="child" id="child"></div>
</div>

JS部分:

<script>var parents = document.getElementById("parents");var child = document.getElementById("child");document.onclick = function(e){alert("你点击了屏幕任何区域");};document.body.onclick = function(e){alert("你点击了body区域");};parents.onclick = function (e) {alert("你点击了parents区域");};child.onclick = function (e) {alert("你点击了child区域");};</script>

具体HTML元素的区域:

  • 点击区域①的时候:会依次弹出你点击了child区域你点击了parents区域你点击了body区域 你点击了屏幕任何区域 这四个弹框。
  • 点击区域②的时候:会依次弹出你点击了parents区域你点击了body区域点击了屏幕任何区域 这三个弹框。
  • 点击区域③的时候:会弹出 你点击了body区域你点击了屏幕任何区域 这两个弹框。
  • 点击区域④的时候:就只弹出 你点击了屏幕任何区域 这一个弹框。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】Kubernetes中crictl的详细用法教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Glyph-ByT5-v2多语言高精度文字海报

微软亚洲研究院、清华大学、北京大学、利物浦大学联合推出渲染高视觉美感文本惊艳海报&#xff0c;效果媲美DALL-E3支持10种不同语言的准确视觉文本渲染项目仓库&#xff1a;https://github.com/AIGText/Glyph-ByT5i68爱六八,链接你我他&#xff1a;https://i68.ltd

基于物联网的区块链算力网络,IGP/BGP协议

目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…

鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

文章目录 一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件 六、示例演示1、代码2、效果 一、装饰器 State装饰器&#xff1a;组件内状态Prop装饰器&#xff1a;父子单向同步Link装饰器&#xff1a;父子双向同步Provide装…

Windows10安装CMake图文教程

CMake是一个跨平台的开源构建工具&#xff0c;用于管理软件构建过程。CMake允许开发人员使用简单的语法来描述项目的构建过程&#xff0c;而无需直接处理特定于操作系统或编译器的细节。开发人员可以编写CMakeLists.txt文件来指定项目的源文件、依赖项和构建规则&#xff0c;然…

2024杭电多校第三场

目录 1001-深度自同构 1003-游走 1007-单峰数列 1008-比特跳跃 1011-抓拍 1012-死亡之组 1001-深度自同构 每个数的答案其实与它的各个因数有关&#xff0c;正向递推一下 #include <bits/stdc.h> using namespace std; #define int long long const int N1e65; co…

计算机毕业设计选题推荐-服装生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

超市客流统计,AI智能分析算法,生成精准客户画像

随着科技的进步&#xff0c;零售行业正经历着前所未有的变革。其中&#xff0c;超市作为零售业态的重要组成部分&#xff0c;面临着如何更有效地吸引顾客、提升购物体验、增加销售额等挑战。借助先进的客流统计系统和AI智能分析算法&#xff0c;超市不仅能够准确地统计客流量&a…

共建数智江城:生态沃土如何孕育技术普惠的硕果

当人们热议一线、新一线等城市综合竞争力时&#xff0c;数字经济早已成为城市之间竞争的新赛道。 作为国家首批智慧城市建设试点城市&#xff0c;武汉一直是数字经济发展的先锋。2023年&#xff0c;武汉建成数字经济产业园区30家&#xff0c;数字经济规模占地区生产总值比重达4…

一篇文章教你学会二叉树的链表实现及其oj题(附源码)

前言 前面我们通过堆实现了二叉树&#xff0c;接下来我们用链表实现二叉树。 1. 实现链式结构二叉树 1.1 结构体定义 二叉树的每个结点需要两个指针&#xff0c;分别指向其左孩子和右孩子。还有一个结点域&#xff0c;存储数据。 还是将数据类型重命名&#xff0c;便于后面…

【JavaEE】通过Linux部署Web项目到云服务器上

一.配置部署所需的环境. 1.1 什么是部署? 要想知道什么是部署, 就要先了解我们在日常开发的过程中所设计到的几种环境: 开发环境: 软件开发环境指的是开发人员在创建、测试和部署软件应用程序时所需的一系列硬件、软件、工具和流程的集合。它是为了支持软件开发过程而构建的…

文件包含漏洞--pyload

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter &#xff1a;用于在读取作用和写入文件时进行过滤和转换操作。 作用1&#xff1a;利用base64编码过滤器读取源码 通常利用文件包含执行php://filte…

哈希表专题

题解之前&#xff1a; 1.有关unordered_map的count功能&#xff1a;查询key&#xff01; Leetcode 1.两数之和 解题思路&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> res;// key:具体的数值(便…

【计算机毕业设计】838装修公司CRM系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

c# - - - ASP.NET Core 网页样式丢失,样式不对

c# - - - ASP.NET Core 网页样式丢失&#xff0c;样式不对 问题 正常样式是这样的。 修改项目名后&#xff0c;样式就变成这样了。底部的内容跑到中间了。 解决 重新生成解决方案&#xff0c;然后发布网站。 原因&#xff1a; 修改项目名之前的 div 上有个这个自定义属…

大数据采集工具——Flume简介安装配置使用教程

Flume简介&安装配置&使用教程 1、Flume简介 一&#xff1a;概要 Flume 是一个可配置、可靠、高可用的大数据采集工具&#xff0c;主要用于将大量的数据从各种数据源&#xff08;如日志文件、数据库、本地磁盘等&#xff09;采集到数据存储系统&#xff08;主要为Had…

React Native在移动端落地实践

在移动互联网产品迅猛发展的今天&#xff0c;技术的不断创新使得企业越来越注重降低成本、提升效率。为了在有限的开发资源下迅速推出高质量、用户体验好的产品&#xff0c;以实现公司发展&#xff0c;业界催生了许多移动端跨平台解决方案。这些方案不仅简化了开发流程&#xf…

C#基于SkiaSharp实现印章管理(5)

印章中最常见的特殊形状通常是五角星&#xff0c;空心、实心的都可能存在&#xff0c;本文学习并实现在印章内部绘制五角星形状。   百度五角星的绘制方法&#xff0c;主要分为三种&#xff1a;   1&#xff09;五角星各点坐标固定&#xff0c;直接调用编程语言的绘制线条或…

校车购票小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;我的乘车信息管理&#xff0c;车辆信息管理&#xff0c;座位管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;车辆信息&#xff0c;我的 开发系统…

推荐一款专注批量推送消息的轻量工具,支持主流平台的消息推送,简单、高效、低成本(附源码)

前言 在数字化时代&#xff0c;企业和个人面临着日益增长的消息推送需求。然而&#xff0c;现有的推送处理方案往往存在一些挑战和不足&#xff0c;如cao作复杂、成本高昂、缺乏灵活性等。这些问题不仅影响了推送效率&#xff0c;也增加了用户的负担。此外&#xff0c;随着工作…