Ajax 什么是Ajax? Ajax的基本语法-程序员宅基地

技术标签: 前端  json  ajax  javascript  jquery  

Ajax

什么是Ajax?

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

  • 同步交互: 客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求。
  • 异步交互: 客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

那么Ajax具有什么优点?

  • 异步交互: 客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
  • 浏览器局部刷新: 在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。

这也是Ajax最大的特点,在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容,这一特点给用户的感受是在不知不觉中完成请求和响应过程。

举例浏览器局部刷新,以GitHub注册页面举例:

输入邮箱地址,GitHub注册界面动态获取用户实时书写信息,整个页面并没有刷新,实时的跟后端确认并实时展示到前端,这就是局部刷新。

以往我们在前后端交互是发送请求的方式有哪些?

  • 浏览器地址栏输入url回车 ---GET请求
  • a标签href属性 ---GET请求
  • form表单 ---GET请求/POST请求
  • Ajax ---GET请求/POST请求

其中from表单提交数据方式页面统一提交即同步交互,而Ajax使用JavaScript技术向服务器发送异步请求,不再需要刷新整个页面,只刷新页面中的部分内容,所有Ajax性能更高。

目前使用Ajax居多为jQuery封装之后的版本,所以在前端页面使用Ajax时需要确保导入了jQuery.

Ajax基本语法:

<script>
    //先给按钮绑定一个点击事件
    $('#btn').click(function (){
        //超后端发送Ajax请求
        $.ajax({
            //1.指定向那个后端发送ajax请求
            url:'',//不写就是向当前地址提交请求
            //2.请求方式需要指定
            type:'post', //不指定默认get,小写即可。
            //3.数据,自定义对象
            data:{'username':'junjie','password':123},
            //4.异步回调机制,回调函数:当后端返回结果是会自动触发,arg接收后端的返回结果
            success:function (args) {
              
            }
        })
    })
</script>

先举一个基本例子来演示Ajax:

页面上有三个input框:
	在前面两个框中输入数字,点击按钮,向后'g端发送ajax请求。
  后端计算出结果,再返回给前端动态展示到第三个input框中(整个过程页面不可以有刷新,也不能在前端计算)

前端页面:

<body>
<input type="text" id="d1">+
<input type="text" id="d2">=
<input type="text" id="d3">
<p>
    <button id="btn">点</button> <!--需要绑定点击事件-->
</p>
</body>


<script>
    //先给按钮绑定一个点击事件
    $('#btn').click(function (){
        //超后端发送Ajax请求
        $.ajax({
            //1.指定向那个后端发送ajax请求
            url:'',//不写就是向当前地址提交请求
            //2.请求方式需要指定
            type:'post', //不指定默认get,小写即可。
            //3.数据,自定义对象
            data:{'username':'junjie','password':123},
            //4.异步回调机制,回调函数:当后端返回结果是会自动触发,arg接收后端的返回结果
            success:function (args) {
              
            }
        })
    })
</script>

views.py: 后端

def ab_ajax(request):
    if request.method == 'POST':
        """
        用ajax向后端提交post请求时,也是在request.POST中能够拿到普通键值对
        输出: <QueryDict: {'username': ['junjie'], 'password': ['123']}>
        """
        print(request.POST)

    return render(request, 'index.html')

def ab_ajax(request):
    if request.method == 'POST':
        """
        用ajax向后端提交post请求时,也是在request.POST中能够拿到普通键值对
        <QueryDict: {'username': ['junjie'], 'password': ['123']}>
        """
        print(request.POST)
        i1 = request.POST.get('i1')
        i2 = request.POST.get('i2')
        # 由于拿到的数据类型是字符串形式。需要先转为整型才能在做逻辑运算。
        i3 = int(i1) + int(i2)
        return HttpResponse(i3)
    return render(request, 'index.html')

<script>
    //先给按钮绑定一个点击事件
    $('#btn').click(function () {
        //超后端发送Ajax请求
        $.ajax({
            //1.指定向那个后端发送ajax请求
            url: '',//不写就是向当前地址提交请求
            //2.请求方式需要指定
            type: 'post', //不指定默认get,小写即可。
            //3.数据,自定义对象
            //获取input框中用户输入的值使用$('id').val(),jQuery书写方式
            data: {'i1': $('#d1').val(), 'i2': $('#d2').val()},
            //4.异步回调机制,回调函数:当后端返回结果是会自动触发,arg接收后端的返回结果
            success: function (args) {
                {#alert(args)#} //通过DOM操作动态渲染到第三个input输入框中
                console.log(typeof (args))  //string
                $('#d3').val(args) //接收JsonResponse数据对象,并自动反序列化。
            }
        })
    })
</script>

后端views.py

def ab_ajax(request):
    if request.method == 'POST':
        """
        用ajax向后端提交post请求时,也是在request.POST中能够拿到普通键值对
        <QueryDict: {'username': ['junjie'], 'password': ['123']}>
        """
        d = {'username':'junjie','age':666}
        return JsonResponse(d)
    return render(request, 'index.html')

2608805-20220301234803410-532381235

针对后端如果使用HttpResponse返回的数据,回调函数不会自动反序列化

如果后端使用的是JsonResponse返回的数据,回调函数会自动反序列化

补充:

# 参数  代码发布项目还会涉及
dataType:'JSON'

当后端是以HttpResponse返回的json格式的数据
默认是不会自动反序列化的
	1.自己手动JSON.parse()
	2.配置dataType参数
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42702493/article/details/124938967

智能推荐

FDQuery多表更新生成sql语句的问题-程序员宅基地

文章浏览阅读396次。query.sql='select a,b,c,d,e from a,b,c where ....';来源3个表,设计时添加字段列表,每个字段有Origin属性分别是a.a,b.b,c.c格式,表示该字段是那个表。 然后query.edit,query.post方法调用后,生成update或insert语句的时候,UPDATE ttdb.dbo.aSET [a.a] ..._fdquery.updateoptions

python做什么生意好找_Python 的练手项目有哪些值得推荐?-程序员宅基地

文章浏览阅读113次。一、不同的阶段,不同的练习我把IT编程类的学习,一般分为以下几个阶段:(以下为递进关系)程序逻辑阶段练习基本都是解答数学题,如万年历,斐波那契数列,完全数,鸡兔同笼问题。要求掌握循环、嵌套循环,二维数组熟练应用。面向对象阶段思维要从面向过程向面向对象,面向接口转变。没有一定代码量的基础,转不过,把面向过程的方法调用,参数传递,方法如何定义设计弄清楚,再转到类的设计,消息传递上。这个时候的练习走向综..._这是因为python的主要工作仍然是在较为深入的系统和框架层做设计和开发

【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测_opencv 孤立点-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏16次。所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的说就是在一副图像中,把目标从背景中分离出来。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。_opencv 孤立点

NCL windows系统安装-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏5次。http://www.doc88.com/p-192266283281.htmlNCL在Linux下的安装非常容易,只需下载适当版本的文件,设置好环境变量即可使用。NCL在Windows下的安装则要麻烦一些,需要先安装一个虚拟Linux环境(Cygwin/X)。本帖将按以下内容详细介绍NCL在Windows平台上的安装过程,希望仅具备Windows基本操作技能的用户也能轻松安装NCL。一..._nclwiq

【Android】 context.getSystemService()浅析-程序员宅基地

文章浏览阅读219次。同事在进行code review的时候问到我context中的getSystemService方法在哪实现的,他看到了一个ClipBoardManager来进行剪切板存储数据的工具方法中用到了context.getSystemService(),而此处我使用的是Application级别的Context进行调用的,可IDE跳转时发现当前类中的getSystemService()方法居然是抽象的,C..._商米 mcontext.getsystemservice(context.usb_service) getdevicelist

地理坐标系转投影坐标系_c#下平面坐标系与地理坐标系投影变换实现-程序员宅基地

文章浏览阅读8.2k次,点赞5次,收藏49次。1.首先确定拿到的文件的坐标系是否带带号(右键图层点击属性)2.从范围是来看这个文件是一个不带带号的文件,从下面的数据源来看,这个文件要有个地理坐标坐标系。3.现在确定了这个文件的坐标系类型(不带带号的地理坐标系)4.确定该文件需要投影在那个坐标系上开始投影转换坐标系1.定义投影2.选择刚刚确定的图层文件(此时坐标系读取的是该图层文件自带的地理坐标)3.点击修改坐标系(由于该文件没有带带号所以我们选择不带带号的投影坐标系)(CM是不带带号的坐标系,zong是带带号的坐标系)4.点_c#下平面坐标系与地理坐标系投影变换实现

随便推点

前端学习6:HTML链接_html超链接代码-程序员宅基地

文章浏览阅读6.4k次,点赞2次,收藏11次。在 HTML 中,我们使用来表示超链接。. 超链接(Hyperlink)是网页中最常见的元素之一,整个互联网都是基于超链接而构建的。超链接可以是一个字,一个词、或者一组词,也可以是一幅图画,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。我们通过使用标签在HTML中创建链接。有两种使用标签的方式:1.通过使用href属性 - 创建指向另一个文档的链接2.通过使用name属性 - 创建文档的书签。_html超链接代码

mysql查4个表_mysql – 在SQL查询中加入4个表-程序员宅基地

文章浏览阅读380次。在我的数据库中有4个关系表,并希望加入它们以获得总价值…例如,我有朋友,家人,跟随和熟人,并希望加入这些以获得“全部”值.表格格式如下:友id follower following---------------------1 2 32 4 5家庭id follower following---------------------1 5 62 ..._mysql根据id查询4个一样的表

linux中操作mysql,linux系统中mysql的安装与基本操作(终端操作)-程序员宅基地

文章浏览阅读154次。本机系统为ubuntu系统1、安装安装命令:sudo apt-get install mysql-server在执行以上命令后,系统会提示输入mysql密码,输入两遍。这是最省事的办法,另外还有deb安装和rpm安装的方法,过程都比较复杂。2、验证是否安装成功登录mysqlmysql -u root -pcloud注意其中 ‘-u’后面的‘root’,为mysql的用户名;‘-p’后面的是安装过程..._linux下安装好mysql,使用mysql -uroot -p报错mysql: [error] unknown option '--

df的索引_df索引-程序员宅基地

文章浏览阅读4.6k次,点赞2次,收藏9次。df 的索引df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]], index=[4, 5, 6], columns=['A', 'B', 'C']) A B C4 0 2 35 0 4 16 10 20 30# 获取某些列——用列名 得到的还是dfdf['A']4 05 06 10print(type(df['A']))<_df索引

qt pro工程转换成sln工程_qt zhuan sln-程序员宅基地

文章浏览阅读2.4k次。1.打开vs2017,点击qt vs tool,打开pro文件,如下图所示2.接着就可以看到输出的vc工程文件。问题:1.找不到mingw解决方案:下载mingw并且配置path。mingw的下载配置见https://blog.csdn.net/QIUCHUNHUIGE/article/details/89177834..._qt zhuan sln

读取 CSV 文件可能遇到的问题_unicodedecodeerror: 'gbk' codec can't decode byte -程序员宅基地

文章浏览阅读2.2k次。当然我们读,用到的库是pandas方法大致如下:import pandas as pddf=pd.read_csv('csv文件路径', sep=','encoding='gbk')可能遇到的问题如下:1、设计器中报错为:Initializing from file failed遇到以上报错提示,解决方法:f = open('csv文件')df = pd.read_csv(..._unicodedecodeerror: 'gbk' codec can't decode byte 0xb7