首页 > Web开发 > 详细

基于Ajax提交formdata数据和错误信息展示

时间:2019-02-15 16:21:51      阅读:141      评论:0      收藏:0      [点我收藏+]

formdata重点:

  1. 实例化FormData这个类
  2. 循环serializeArray可以节省代码量
  3. 图片要用$(‘#id‘)[0].files[0]来获得
  4. 加上contentType:false和processData:false

错误信息展示重点:

  1. input框的id是id_field,可以通过循环错误信息获取错误信息的字段field,然后通过id_filed展示错误信息
  2. 展示错误信息前先把错误信息清空了

 

html

<div class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <form id="fm">
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label for="{{ field.id_for_label }}">{{ field.label }}</label>
                        {{ field }}
                        <span class="error-info pull-right"></span>
                    </div>
                {% endfor %}

                <div class="form-group">
                    <label for="id_avatar">头像
                        <img width="60" height="60" id="avatar_img" src="/static/blog/img/default_avatar.jpg">
                    </label>

                    <input type="file" name="avatar" id="id_avatar" class="hidden">
                </div>

                <input type="button" id="reg_btn" class="btn btn-info" value="提交">
            </form>
        </div>
    </div>
</div>

 

views.py

def register(request):
    if request.is_ajax():
        print(request.POST)
        form = RegForm(request.POST)
        response = {user: None, msg: None}
        if form.is_valid():
            response[user] = form.cleaned_data.get(user)
        else:
            print(form.cleaned_data)
            print(form.errors)
            response[msg] = form.errors

        return JsonResponse(response)

    form = RegForm()

    context = {
        form: form
    }
    return render(request, register.html, context=context)

 

js

<script src="/static/blog/js/jquery-3.3.1.js"></script>
<script>
    // 头像预览功能
    $(‘#id_avatar‘).change(function () {   // 图片发生了变化,所以要用change事件
        // 获取用户选中的文件对象
        let file_obj = $(this)[0].files[0];

        // 获取文件对象的路径
        let reader = new FileReader();  // 等同于在python里拿到了实例对象
        reader.readAsDataURL(file_obj);

        reader.onload = function () {
            // 修改img的src属性,src = 文件对象的路径
            $("#avatar_img").attr(‘src‘, reader.result);  // 这个是异步,速度比reader读取路径要快,
                                                          // 所以要等reader加载完后在执行。
        };
    });

    // 基于Ajax提交数据
    $(‘#reg_btn‘).click(function () {
        let formdata = new FormData();
        let request_data = $(‘#fm‘).serializeArray();
        $.each(request_data, function (index, data) {
            formdata.append(data.name, data.value)
        });
        formdata.append(‘avatar‘, $(‘#id_avatar‘)[0].files[0]);

        $.ajax({
            url: ‘‘,
            type: ‘post‘,
            contentType: false,
            processData: false,
            data: formdata,
            success: function (data) {
                if (data.user) {
                    // 注册成功
                } else {
                    // 注册失败

                    // 清空错误信息,每次展示错误信息前,先把之前的清空了。
                    $(‘span.error-info‘).html("");
                    $(‘.form-group‘).removeClass(‘has-error‘);
                    // 展示此次提交的错误信息
                    $.each(data.msg, function (field, error_list) {
                        $(‘#id_‘ + field).next().html(error_list[0]);
                        $(‘#id_‘ + field).parent().addClass(‘has-error‘);  // has-error是bootstrap提供的
                    });
                }
            }
        })
    })

</script>

 

基于Ajax提交formdata数据和错误信息展示

原文:https://www.cnblogs.com/lshedward/p/10384218.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!