ajax post请求 解决自动再get请求一次

ajax post请求 解决自动再get请求一次

HTML

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    
</head>
<body>
<div class="container">
    <div id="msg"></div>
    <form>
        <div>
            <label for="username">UserName</label>
            <input type="text" name="username" id="username">
        </div>
        <div>
            <label for="password">Password</label>
            <input type="password" name="password" id="password">
        </div>
        <div>
            <label for="check_code">Check Code</label>
            <input type="text" name="check_code" id="check_code">
        </div>
        <div>
            <button type="button" onclick="Submit()">Login</button>
            <!-- button标签一定要加type属性,禁止表单自动提交机制   -->
        </div>
    </form>
</div>
</body>
</html>

javascript

javascript 复制代码
<script>
<script src="../jquery-3.7.1.min.js"></script>
function Submit(){
    $.ajax({
        url: '/post_login',
        type: 'POST',
        contentType: 'application/json',
        dataType: 'json',
        data: $('form').serialize(),  // 发送的数据
        success: function(res) {
            if (res.code === 200){
                alert(res.msg)
            }else {
                console.log(res, '999999')
                $('#msg').text(res.msg)
            }
        },
        error: function(error) {

            console.error('Error:', error);
        }
    });

}
</script>

Flask

python 复制代码
from flask import Flask
from flask import render_template, redirect, request, jsonify
app = Flask(__name__)

@app.route('/', methods=['GET'])
@app.route('/login', methods=['GET'])
def get_login():
	# 获取登录页面
    return render_template('Login.html')

@app.route('/post_login', methods=['POST'])
def post_login():
	# 用户登录,提交表单
    return jsonify(dict(code=401, msg='success'))

第一种方法:

button按钮中,把属性type设置为type="button",防止表单默认提交机制

html 复制代码
<button type="button" onclick="Submit()">Login</button>
 <!-- button标签一定要加type属性,禁止表单自动提交机制   -->

第二种方法:

JavaScript 事件监听器未正确处理

禁止自动提交机制

javascript 复制代码
// 阻止默认的提交行为
$(document).on('click', 'button[type="submit"]', function(e) {
    e.preventDefault(); // 阻止默认的提交行为
    // 你的 AJAX 代码
    $.ajax({
        type: "POST",
        url: "/your-endpoint",
        data: { /* 数据 */ },
        success: function(response) {
            // 处理响应
        }
    });
});

// 阻止表单的默认提交行为
$('form').on('submit', function(e) {
    e.preventDefault(); // 阻止表单的默认提交行为
    // 你的 AJAX 代码
});

// 阻止事件进一步传播到其他事件处理器
$('button').on('click', function(e) {
    e.stopImmediatePropagation(); // 阻止事件进一步传播到其他事件处理器
    // 你的 AJAX 代码
});
相关推荐
Dream-Y.ocean34 分钟前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
Csvn2 小时前
性能监控
前端
Highcharts.js2 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
Csvn2 小时前
构建工具
前端
FRing032 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
kyriewen5 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒5 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫5 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus6 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬7 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端