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

news2024/9/9 0:48:19

目录

一.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.coloradmin.cn/o/1958654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows server服务器/linux服务器离线安装pandas

windows server服务器/linux服务器离线安装pandas pypi官网下载whl文件速度较慢&#xff0c;推荐使用国内的镜像源来下载&#xff0c;镜像源地址为 清华大学 &#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple…

docker安装与container基本使用

安装 Homebrew 的 Cask 已经支持 Docker for Mac, mac用户狂喜 brew install --cask --appdir/Applications docker其他入门用法可参考 Docker Hello World- 菜鸟教程 或网上自行搜索博客学习。本文主要记录我运行go-zero-mall用到的一些注意点。当然&#xff0c;gonivinck项…

vue2+cesium实现报警特效

实现效果: 录制_2024_07_29_21_36_33_571 实现步骤如下: 1、安装cesium包:npm install cesium 2、在node-modules中找到刚刚安装的cesium,在文件夹中里面有一个Build文件夹,把Build里面的Cesium复制出来丢到public中 3、在index.html中进行引入: 4、新建一个js文件,…

前端常见场景、JS计算精度丢失问题(Decimal.js 介绍)

目录 一. Decimal.js 介绍 二. 常用方法 1. 创建 Decimal 实例 2.加法 add 或 plus 3.减法 sub 或 minus 4.乘法 times 或 mul 5.除法 div 或 dividedBy 6.取模 7.幂运算 8.平方根 9.保留小数位 toFixed方法(四舍五入) 三.项目应用 前端精度丢失问题通常由以下原因…

无线融合,智能协同:ECWAN打造物联网高效协同网络

关键词&#xff1a;资产管理、ECWAN、无线混合组网、用电监测、用电计量、广域基站、计量插座、边缘协同 在当今快速发展的物联网领域&#xff0c;每天都有数以亿计的设备互相通信&#xff0c;形成庞大而复杂的网络生态。在这样的背景下&#xff0c;ECWAN技术以其灵活、高效和智…

【Linux】TCP全解析:构建可靠的网络通信桥梁

文章目录 前言1. TCP 协议概述2. TCP报头结构3. 如何理解封装和解包呢&#xff1f;4. TCP的可靠性机制4.1 TCP的确认应答机制 4.2 超时重传机制5. TCP链接管理机制5.1 经典面试题&#xff1a;为什么建立连接是三次握手&#xff1f;5.2 经典面试题&#xff1a;为什么要进行四次挥…

读零信任网络:在不可信网络中构建安全系统04最小特权

1. 公钥基础设施 1.1. PKI 1.2. 数字证书本身并不能解决身份认证问题 1.2.1. 需要一种方法来验证获得的公钥的确属于某人 1.2.2. 公钥基础设施&#xff08;PKI&#xff09;解决了这个问题 1.3. PKI定义了一组角色及其职责&#xff0c;能够在不可信的网络中安全地分发和验证…

【Websim.ai】一句话让AI帮你生成一个网页

【Websim.ai】一句话让AI帮你生成一个网页 网站链接 websim.ai 简介 websim.ai接入了Claude Sonnet 3.5&#xff0c;GPT-4o等常用的LLM&#xff0c;只需要在websim.ai的官网指令栏中编写相关指令&#xff0c;有点类似大模型的Prompt&#xff0c;指令的好坏决定了网页生成的…

Lc63---1859将句子排序(排序)---Java版(未写完)

1.题目描述 2.思路 &#xff08;1&#xff09;首先将句子按空格分割成若干单词。 &#xff08;2&#xff09;每个单词的最后一个字符是它的位置索引。我们可以通过这个索引将单词恢复到正确的位置。 &#xff08;3&#xff09;按照单词的索引顺序排序这些单词。 &#xff08;4…

【已解决】嵌入式linux mobaxterm unable to open connection to comx 串口正常连接,但终端无法输入

1.点击Session重新选择串口&#xff0c;注意看看串口是不是连接到虚拟机&#xff0c;导致串口被占用。 2.选择PC机与开发板连接的串口&#xff0c;不知道的话可以打开设备管理器看看&#xff0c;选择正确的波特率&#xff0c;一般是115200。 3.关键一步&#xff1a;选择后别急…

性能测试:深入探索与实战指南

大家好&#xff0c;我是一名测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家联系我&#xff0c;一起【分享测试知识&#xff0c;交流测试技术】 在当今这个信息化、数字化的时代&#xff0c;软件系统的性能直接关乎到用户体验…

使用 Matlab 绘制带有纹理的柱状图

以下是效果 1. 在 Matlab 里安装两个额外的库&#xff1a; hatchfill2 和 legendflex。 &#xff08;1&#xff09;搜索并安装 hatchfill2&#xff0c;用来画纹理 (2) 搜索并安装 legendflex&#xff0c;用来画自定义的图例 2. 代码&#xff08;说明见注释&#xff09; data …

Centos 7系统(最小化安装)安装Git 、git-man帮助、补全git命令-详细文章

安装之前由于是最小化安装centos7安装一些开发环境和工具包 文章使用国内阿里源 cd /etc/yum.repos.d/ && mkdir myrepo && mv * myrepo&&lscurl -O https://mirrors.aliyun.com/repo/epel-7.repo;curl -O https://mirrors.aliyun.com/repo/Centos-7…

docker安装phpMyAdmin

直接安装phpMyAdmin需要有php环境&#xff0c;比较麻烦&#xff0c;总结了使用docker安装方法&#xff0c;并提供docker镜像。 1.docker镜像 见我上传的docker镜像&#xff1a;https://download.csdn.net/download/taotao_guiwang/89595177 2.安装 1).加载镜像 docker load …

(leetcode学习)24. 两两交换链表中的节点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4…

Sonatype Nexus Repository搭建与使用(详细教程3.70.1)

目录 一. 环境准备 二. 安装jdk 三. 搭建Nexus存储库 四. 使用介绍 一. 环境准备 主机名IP系统软件版本配置信息nexus192.168.226.26Rocky_linux9.4 Nexus Repository 3.70.1 MySQL8.0 jdk-11.0.23 2核2G&#xff0c;磁盘20G 进行时间同步&#xff0c;关闭防火墙和selinux…

秋招突击——7/29——操作系统——网络IO

文章目录 引言基础知识零拷贝传统文件读取传统文件传输零拷贝mmap writesendifle 网络通信IO模型阻塞IO非阻塞IO IO多路复用模型selectpollselect和poll的总结epoll边缘触发ET和水平触发LT 信号驱动IO模型异步IO 面试题库1、说一下Linux五种IO模型2、阻塞IO和非阻塞IO应用场景…

可视化目标检测算法推理部署(一)Gradio的UI设计

引言 在先前RT-DETR模型的学习过程中&#xff0c;博主自己使用Flask框架搭建了一个用于模型推理的小案例&#xff1a; FlaskRT-DETR模型推理 在这个过程中&#xff0c;博主需要学习Flask、HTML等相关内容&#xff0c;并且博主做出的页面还很丑&#xff0c;那么&#xff0c;是…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十六章 电容屏触摸驱动实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

1.5 1.6 操作系统引导 虚拟机

操作系统引导 操作系统引导的概念 操作系统引导是指计算机利用CPU运行特定程序&#xff0c;通过程序识别硬盘&#xff0c;识别硬盘分区&#xff0c;识别硬盘分区上的操作系统&#xff0c;最后通过程序启动操作系统&#xff0c;一环扣一环地完成上述过程 操作系统引导的过程 …