Ajax没有将数据发送到Django视图

问题描述

我只写了必需的东西。我是新手,因此请忽略质量问题:)。

我的HTML ---

<div class="form-group row pt-3 d-flex justify-content-center">
            <div class="col-sm-10 d-flex justify-content-center">
                <button id="submit_pic" style="width: 70%;" type=""
                    class="btn btn-primary">Combine</button>
                <script>

                    $("#submit_pic").submit(function (e) {
                        e.preventDefault();
                        var csrftoken = $("input[name='csrfmiddlewaretoken']");
                        
                        $.ajax({
                            url: "{% url 'make_combine' %}",//url: "/make_combine",type: "POST",//-------here is problem-------
                            dataType: "json",cache: true,headers: {'csrfmiddlewaretoken': csrftoken.val()},data: {"for_combine": response_send },//"success": function (result) {
                            //    console.log(data);
                            //},});
                        return false;
                    });

                    
                </script>
            </div>
         </div>

django views.py-

import json
def make_combine(request):
      combine_data7 = request.POST.get("for_combine")

我已经尝试了很多互联网和StackOverflow上的技巧,但仍然收到此错误,它表明Combine_data7是nonetype ----

    AttributeError at /make_combine
    'nonetype' object has no attribute 'split'

感谢妈妈/先生。

解决方法

submit_pic应该在form id内部而不是button id内部。试试下面的代码,它将100%工作。另外,在表单内部设置enctype="multipart/form-data"属性也是一种好习惯。

<div class="form-group row pt-3 d-flex justify-content-center">
    <form id='submit_pic' enctype="multipart/form-data">
        <div class="col-sm-10 d-flex justify-content-center">
            <button style="width: 70%;" type="" class="btn btn-primary">Combine</button>
        </div>
    </form>
</div>
<script>
    $("#submit_pic").on('submit',function (event) {
        event.preventDefault();
        var csrfToken = $("input[name=csrfmiddlewaretoken]").val();
        console.log(`Error ye raha === ${response_send}`)
        $.ajax({
            url: "{% url 'make_combine' %}",//url: "/make_combine",type: "post",//-------here is problem-------
            dataType: "json",cache: true,headers: {
                'csrfmiddlewaretoken': csrfToken
            },data: {
                "for_combine": response_send
            },//"success": function (result) {
            //    console.log(data);
            //},});
        return false;
    });
</script>