Ajax前后端交互

本文介绍了JSON格式及其与Python字典的区别,并详细讲解了Ajax的基本原理、作用,以及在实际中的应用案例,包括使用tornado进行前后端交互的加法运算示例。通过Ajax,实现了无需刷新页面即可进行数据更新的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)JSON格式

(1)JSON介绍

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于
    ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
  • JSON是一个标记符的序列。这套标记符包含六个构造字符({、}、[、]、:、,)、字符串、数字和三个字面名。
  • JSON值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
    在这里插入图片描述
    以上这五种都是符合JSON格式的数据。 但是我们最常用的是第一种,对象形式,因此也有多人分不清python字典,js对象和JSON对象的区别。

对于JSON格式具体和python字典来对比的话,有这样几个细节点需要大家注意:

  • JSON中key位置的值只能是字符串,JSON中的字符串必须是双引号
  • python中的字典,键是不可变数据类型,值没有固定要求
  • js字典,键可以是数字、字符串或布尔值

(2)JS、Python与JSON类型转换

①JS与JSON的转换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js与json类型转换</title>
</head>
<body>
<script>
    //定义一个js对象
    js_obj = {'name':'张三','age':18}

    // js对象转成json格式的数据  字符串
    str = JSON.stringify(js_obj)
    console.log(str)             //   输出单引号变为了双引号{"name":"张三","age":18}
    // console.log(typeof str);  //   类型是string

    // json格式的数据转成js对象 object对象
    obj1 = JSON.parse(str)
    console.log(obj1);  //输出双引号变为了单引号{name: '张三', age: 18}
    console.log(typeof obj1);  //类型是object
</script>
</body>
</html>

②Python与JSON的转换
python代码:

import json       #导入json模块   
# dic = {"name":"子冧","age":18,"bool":True}
# print(type(dic))  # <class 'dict'>

# 字典类型
di = {'name':'张三','age':18,'sex':'男'}
# 转成json格式数据
jd = json.dumps(di)
# print(jd)  # {"name": "\u5b50\u51a7", "age": 18, "sex": "\u7537"}
# print(type(jd))  # <class 'str'>

# 转回python的字典
dic = json.loads(jd)
print(dic)  # {'name': '张三', 'age': 18, 'sex': '男'}
print(type(dic))  # 类型<class 'dict'>

在这里插入图片描述

(二)Ajax使用

(1)Ajax介绍

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。AJAX = 异步 JavaScript 和 XML。 (asynchronous JavaScript and XML)

(2)作用

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

(3)tornado

首先在虚拟机中下载tornadopip install tornado
下载完成后可以用pip list查看是否下载成功
然后在pycharm中引入tornado模块import tornado.web
之后ctrl+鼠标左键单击一下web单词,复制25-37行代码到自己的文件
在这里插入图片描述
后端代码:

# 前后端数据交互
# ctrl+鼠标左键单击一下web单词
import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        # self.write("Hello, world")
        self.render('test2.html')    # 引用前端界面

# 前端表单标签当中的用户及密码
    def post(self):
        print(self.get_argument('user2'))
        print(self.get_argument('pwd2'))

# 传给前端
if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),# 前端访问的路由
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--<form action="/" method="post">-->
    用户名: <input type="text" placeholder="请输入用户名" name="user"> <br>&emsp;码: <input type="password" placeholder="请输入密码" name="pwd"> <br>
    <input type="submit" value="登录" id="btn">
<!--</form>-->


<!--jq ajax异步提交-->
<!-- 引入了jQuery模块 -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
<script>
    $('#btn').click(function (){
        user = $('input[name="user"]').val()      /*通过属性选择器,选中input标签,属性为name,值为user,在获取到val*/
        pwd = $('input[name="pwd"]').val()


        //数据提交到后台
        $.ajax({
            'type':'post',       /*类型*/
            'url':'/',           /*路由*/
            'data':{
                'user2':user,
                'pwd2':pwd

            }
        })
    })
</script>

</body>
</html>

运行结果:
在这里插入图片描述
在这里插入图片描述
使用Ajax后,点击登陆后页面仍然保留前端样式,数据提交到后台。

(4)前后端交互案例(加法运算)

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>前后交互案例:加法计算</title>
</head>
<body>
<input type="text" name="a">+
<input type="text" name="b">=
<input type="text" name="c">
<button id="btn">计算</button>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
<script>
    ipt1 = $('input[name="a"]')
    ipt2 = $('input[name="b"]')
    ipt3 = $('input[name="c"]')
    btn = $('#btn')
    btn.click(function () {
        num1 = ipt1.val() //string
        num2 = ipt2.val()

//通过前端实现
        // console.log(typeof num1)  //  查看num1类型为string
        // num3 = num1+num2
        // console.log(num3)  //   输出11,为字符串拼接
        // num3 = parseInt(num1)+parseInt(num2)    //字符串转整形
        // ipt3.val(num3)
         
//通过后端实现   
        $.ajax({
            'type':'post',
            'url':'/',
            'data':{
                'num1':num1,
                'num2':num2,
            },
            // 后台响应成功之后返回到前端页面的值
            'success':function (data) {  //data前端页面的值 字典
                num3 = data['result']
                ipt3.val(num3)
            }
            },
        )
    })
</script>
</body>
</html>

后端代码:

import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        # self.write("Hello, world")
        self.render('test3.html')

    def post(self):
        num1 = int(self.get_argument('num1'))
        num2 = int(self.get_argument('num2'))
        num3 = num1+num2

        # 传给前端是字典类型的数据
        ret = {'result':num3}   #接收
        self.write(ret)         #写入


if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()
### 使用 Ajax 实现前端与后端的数据交互 #### 前言 在现代 Web 开发中,前端与后端之间的数据交互至关重要。为了实现在不刷新页面的情况下进行动态更新,AJAX 成为了一种不可或缺的技术[^2]。 #### AJAX 的工作原理 AJAX 是一种用于创建快速动态网页的技术,它允许浏览器通过 XMLHttpRequest 对象向服务器发送异步请求并处理响应。这使得可以在不重新加载整个页面的情况下更新部分网页内容。当用户触发某个事件(如点击按钮),JavaScript 就会发起一个 HTTP 请求给服务器;服务器接收到请求之后执行相应的逻辑操作并将结果作为 JSON 或者 XML 返回给客户端;最后由 JavaScript 解析这些数据并对 DOM 进行相应更改来反映最新的状态变化。 #### Python Flask 后端设置 对于基于 Python 的项目来说,Flask 是一个轻量级但功能强大 web 框架选项之一。要让 Flask 支持来自前端AJAX 调用,则需要确保路由能够接收 GET/POST 方法传入的信息,并且返回适当格式化后的 JSON 数据结构以便于前端解析使用[^1]。 ```python from flask import jsonify, request @app.route('/submit', methods=['POST']) def submit(): data = request.get_json() # 处理data... response_data = { 'status': 'success', 'message': 'Data received!' } return jsonify(response_data), 200 ``` #### jQuery 和 AJAX 发送 POST 请求 在前端方面,可以利用 jQuery 库简化 AJAX 请求的操作过程。下面展示了一个简单的例子说明如何构建表单并通过 AJAX 提交给后端服务: ```javascript $.ajax({ url: '/submit', type: 'POST', contentType: "application/json", dataType: 'json', data: JSON.stringify({ key: value }), success: function (response) { console.log('Success:', response); }, error: function (xhr, status, err) { console.error('Error:', xhr.responseText); } }); ``` 此代码片段展示了怎样封装待传输的数据对象成字符串形式,在成功回调函数里打印出从服务器获取的结果信息或者是在遇到错误时记录下具体原因。 #### 结合 Layui 实现更复杂的功能 如果希望进一步增强用户体验,还可以考虑引入像 Layui 这样的 UI 组件库来进行更加美观和便捷的设计。例如,可以通过集成表格插件完成对数据库记录列表式的管理——包括但不限于增删改查等功能点。此时同样依赖于上述提到过的 AJAX 技术去实现前后两端间高效稳定的消息传递机制[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值