python flask ajax处理单一按钮_flask-wtf,绑定按钮通过ajax发送请求,点击一次按钮会发送两个post请求...

在使用Flask、Flask-WTF和AJAX构建的表单中,点击提交按钮导致发送两个POST请求。问题出现在按钮绑定的AJAX事件上。当移除按钮绑定并直接在文档加载时执行AJAX请求,只发送了一个请求。这可能是因为按钮点击事件被触发两次。解决方案是正确处理按钮的点击事件以防止重复提交。
摘要由CSDN通过智能技术生成

问题描述

点击一次提交按钮会发送两个post请求

问题出现的环境背景及自己尝试过哪些方法

如果不通过绑定按钮提交的话不会出现两个请求的情况,想知道这是什么原因

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

# form.py 表单

class RequestForm(FlaskForm):

InputName = StringField(

'用户名:',

validators=[DataRequired("请输入登录名"), Length(1, 15)],

render_kw={'class': 'form-control','id': 'InputName', 'placeholder': 'Jane Doe'},

)

InputPassword = PasswordField(

'密码:',

validators=[DataRequired("请输入密码"), Length(3, 16)],

render_kw={'class': 'form-control', 'id': 'InputPassword', 'placeholder': 'Password'},

)

InputStartTime = DateTimeField(

'开始时间: ',

render_kw={'type': 'text', 'class': 'form-control'}

)

InputEndTime = DateTimeField(

'结束时间: ',

render_kw={'type': 'text', 'class': 'form-control'}

)

Submit = SubmitField(

'提交',

render_kw={'type': 'submit', 'class': "btn btn-default"}

)

# views.py 视图

@reddot.route('/parkcount', methods=['GET', 'POST'])

def parkcount():

res = {}

form = RequestForm()

if request.method == 'POST':

if form.validate_on_submit():

InputName = form.data['InputName']

InputPassword = form.data['InputPassword']

InputStartTime = form.data['InputStartTime']

InputEndTime = form.data['InputEndTime']

res['status'] = 'success'

res['message'] = '提交成功,正在请求数据...'

return json.dumps(res)

else:

res['status'] = 'error'

res['message'] = '提交失败!'

return json.dumps(res)

return redirect(url_for('reddot.parkbase'))

{{ form.csrf_token }}

{{ form.InputName.label }}

{{ form.InputName }}

{{ form.InputPassword.label }}

{{ form.InputPassword }}

{{ form.InputStartTime }}

{{ form.InputEndTime }}

{{ form.Submit }}

$('#Submit').click(function(){ # 绑定按钮提交,点击按钮的时候会提交两个post请求

var post_data = $('#sendform').serialize();

$.ajax({

url:'{{ url_for('reddot.parkcount') }}',

type:'POST',

data:post_data,

dataType: 'json',

success:function(res){

if (res['status'] == 'success') {

console.log('aaa');

}else {

console.log('failed')

}

},

error:function (res) {

if (res['status'] == 'fail') {

alert(res['status']);

}

}

})

})

如果改成这样子,点击提交的时候,就只发送一个请求

$(function(){

var post_data = $('#sendform').serialize();

$.ajax({

url:'{{ url_for('reddot.parkcount') }}',

type:'POST',

data:post_data, # 还有个问题,如果这边的post_data不是表单内容,比如post_data = 'aaa', 后台也能收到表单内容,

dataType: 'json',

success:function(res){

if (res['status'] == 'success') {

console.log('aaa');

}else {

console.log('failed')

}

},

error:function (res) {

if (res['status'] == 'fail') {

alert(res['status']);

}

}

})

})

你期待的结果是什么?实际看到的错误信息又是什么?

绑定按钮的结果,这是什么原因呢?刚学习,不太懂,谢谢大家

00634f52f953676d3e2ee972bd5a35bc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你说"用python一个登录网页"时,我理解你的意思是使用Python编写一个使用Flask框架的登录页面,并且登录按钮能够发送POST请求。以下是一个简单的示例: ```python from flask import Flask, render_template, request app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 处理登录逻辑,例如验证用户名和密码 # 发送POST请求 # your_post_request(username, password) return "登录成功" return render_template('login.html') if __name__ == '__main__': app.run() ``` 在这个示例中,我们使用Flask框架创建了一个简单的应用。当用户访问根路径"/"时,将调用`login`函数。 在`login`函数中,我们使用`request`对象获取表单数据,包括用户名和密码。然后,您可以根据实际需求处理登录逻辑,例如验证用户名和密码是否正确,并且可以在此处添加自己的代码。 如果请求的方法是POST,您可以在这里执行发送POST请求的操作,例如调用自定义函数`your_post_request(username, password)`来发送POST请求。 如果请求的方法是GET,我们使用`render_template`函数来渲染名为"login.html"的模板文件,该文件应该位于与Python文件相同目录的"templates"文件夹中。在模板文件中,您可以创建登录表单,并通过`action`属性指定提交表单时要发送POST请求的路径。 这只是一个简单的示例,您可以根据自己的需求进行修改和扩展。 希望对你有所帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值