有客自远方来52 2024-07-23 21:24 采纳率: 15.3%
浏览 0
已结题

为什么前端页面不弹出错误?

以下是我的代码,我利用ajax传递数据,但前端页面上为什么没有弹出短信验证码的错误?
前端代码

<html>
<head>
    <meta http-equiv="content-type" content="text/html;
    charset=UTF-8">
    <meta name="viewport" content="width=device-width,
    initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>注册</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css'%}">
    <link rel="stylesheet" href="{% static 'plugins/font-awesome-4.7.0/css/font-awesome.css'%}">
    <link rel="stylesheet"
          href="{% static 'plugins/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css'%}">
</head>
<body>
<div class="account">
    <h2 style="text-align:center;">用户注册</h2>
    <form id="regForm" method="POST" style="margin-top:20px;" novalidate>
        {% csrf_token %}
        {% for field in form %}
        {% if field.name == 'code' %}
        <div class="form-group" style="margin-top:20px;">
            <label> {{ field.label}}</label>
            <div class="clearfix">
                <div class="col-md-6" style="padding:0;">{{field}}</div>
                <div class="col-md-6"><input id="btnSms" type="button" class="btn btn-default" value="点击获取验证码"></div>
            </div>
            <span class="error-msg" style="color:red;position:absolute"></span>
        </div>
        {% else %}
        <div class="form-group" style="margin-top:20px;">
            <label> {{ field.label}}</label>
            {{field}}
            <span class="error-msg" style="color:red;position:absolute"></span>
            {% endif %}
            {%endfor%}

        <input id="btnSubmit" style="height:35px;width:200px; margin-left:90px; font-size:17px;" type="button" value="注册"
                       class="btn btn-info">

            <div>
                 <span style="float: right; margin-top:20px;">已有账号.<a style=" text-decoration:none;" href=" ">去登录</a ></span>
            </div>
        </div>
    </form>

</div>
<script src="{% static 'js/jquery-3.5.1/jquery-3.5.1.min.js'%}"></script>
<script>
    //页面加载完自动执行函数
    $(function(){
        bindClickBtnSms();
        bindClickSubmit();
        });

    //点击提交注册
        function bindClickSubmit() {
            $('#btnSubmit').click(function(){
                $(".error-msg").empty();
                //收集数据
                //发送到后台
                $.ajax({
                    url:"/register/",
                    type:"post",
                    data:$('#regForm').serialize(),
                    dataType:"json",
                    success:function(res){
                        if(res.success){
                            location.href=res.data;
                       }else{
                        //错误信息
                        $.each(res.error,function(key,value){
                            $('#id_'+key).next().text(value[0]);
                            })
                        }
                    }
                })
            })
        }
</script>
</body>
</html>


后端代码

def register(request):
    """注册"""
    if request.method == 'GET':
        form = RegisterForm()
        return render(request, 'register.html', {'form': form})

    form = RegisterForm(data=request.POST)
    if form.is_valid():
        # 验证通过,写入数据库
        form.save()
        return JsonResponse({'success': True, 'data': '/login/'})
    return JsonResponse({'success': False, 'error': form.errors})
class RegisterForm(BootStrapModelForm):
    password = forms.CharField(
        label="密码",
        widget=forms.PasswordInput(),
        min_length=8,
        max_length=20,
        error_messages={
            'min_length': "密码长度不能小于8个字段",
            'max_length': "密码长度不能大于20个字段",
        })
    confirm_password = forms.CharField(label="确认密码", widget=forms.PasswordInput())
    mobile = forms.CharField(label="手机号",
                             validators=[RegexValidator(r'^(1[3|4|5|6|7|8|9])\d{9}$', '手机号格式错误'), ])
    code = forms.CharField(label="短信验证码")

    class Meta:
        model = models.Username
        fields = ['username', 'email', 'password', 'confirm_password', 'mobile', 'code']

错误

img

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-23 21:28
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的代码和问题,以下是一些可能的原因和解决方法:

    1. 为什么前端页面不弹出短信验证码的错误?

      • 确保后端返回的错误信息中包含短信验证码字段的错误。检查form.errors是否包含了code字段的错误信息。
      • 在前端的success函数中,确保res.error对象包含code字段,并且对应的错误信息被正确添加到短信验证码输入框旁边的.error-msg元素中。
    2. 如何确保前端页面正确显示错误信息?

      • 检查res.error的格式,确保它是预期的JSON对象格式。
      • 确保$.each循环正确遍历了res.error对象,并正确地将错误信息显示在每个字段旁边的.error-msg元素中。
    3. 如何收集并发送表单数据到后端?

      • 使用$('#regForm').serialize()来收集表单数据是正确的。
      • 确保$.ajax中的urltype属性正确,以便数据能够发送到正确的后端接口。
    4. 如何验证后端接收到的数据并返回正确的响应?

      • 确保后端register视图函数能够正确处理POST请求,并且form.is_valid()能够正确执行。
    5. 如何确保前端页面在提交表单后正确跳转到登录页面?

      • 检查res.success是否为True,如果是,则使用location.href=res.data;进行页面跳转。
    6. 如何确保短信验证码的输入框旁边正确显示错误信息?

      • 确保短信验证码的输入框有一个唯一的id属性,例如id="id_code",这样$('#id_code').next()才能正确找到错误信息显示的位置。
    7. 如何处理前端页面的按钮点击事件?

      • 确保bindClickSubmit函数被正确绑定到注册按钮的点击事件上,并且该函数在页面加载时通过$(function(){ ... })被调用。
    8. 如何处理前端页面的短信验证码获取按钮点击事件?

      • 确保bindClickBtnSms函数被正确实现,并且绑定到短信验证码获取按钮的点击事件上。您需要提供bindClickBtnSms函数的实现代码来进一步检查。
    9. 如何确保前端页面的CSS样式正确应用?

      • 确保CSS样式文件的路径正确,并且样式选择器正确匹配到HTML元素。
    10. 如何确保前端页面的JavaScript脚本正确加载和执行?

      • 确保<script>标签中的路径正确,并且脚本在文档加载完成后通过$(function(){ ... })$(document).ready(function(){ ... })执行。

    此外,您提供的图片内容显示了用户注册表单的布局,但没有提供错误信息的显示,这可能是因为后端没有返回错误信息,或者前端没有正确处理和显示这些错误信息。请检查后端的响应和前端的错误处理逻辑,确保它们能够协同工作以显示错误信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月28日
  • 创建了问题 7月23日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?