javascript
  • jquery
  • ajax
  • django
  • forms
  • 2017-08-01 84 views 0 likes 
    0

    我的AJAX查询发送空对象Object { }按钮单击 - 它应该发送表单数据。form.serialize()发送空对象 - Django表单

    我有一个带复选框的表单。它呈现和功能,和HTML是这样的:

    <form method="post" action="" data-id="filter-form"> 
    
    //This is from Django's CSRF token 
    <form method="post" > 
    <input type='hidden' name='csrfmiddlewaretoken' value=.../> 
    
    <div class="form-group"> <div id="div_id_vacant" class="checkbox"> 
        <label for="id_vacant" class="">Is Vacant</label> 
        <input type="checkbox" name="vacant" class="checkboxinput" id="id_vacant" /> 
    </div></div> 
    
    ...more of the same inputs... 
    
    </form> 
    </form> 
    
    <hr/> 
    
    <button id="search-btn" class="btn btn-info" data-filter-leads-url="/leads/ajax/filter">Search</button> 
    <button id="download-btn" class="btn btn-default" data-filter-leads-url="/leads/csv">Download</button> 
    

    我也有一些JQuery的东西。它是假设读取表单并通过发布到Django视图发送AJAX请求。它看起来像这样:

    {Django CSRF code here} 
    
    var searchBtn = $("#search-btn"); 
    searchBtn.click(function() { 
        var form = $("#filter-form"); 
    
        $.ajax({ 
         url: searchBtn.attr("data-filter-leads-url"), 
         method: "POST", 
         data: form.serialize(), 
         dataType: 'json', 
         success: function (data) { 
          console.log(data) 
         }, 
         error: function (data) { 
          console.log("There was an error."); 
          console.log(data.error()) 
         } 
        }); 
    
    }); 
    

    我也试过:

    var formData = new FormData(form[0]); 
    

    它发送一个空对象也是如此。

    空物体通过 Django的视图打印request.POSTconsole.log(form.serlialize())命令以及一个console.log(formData)命令确认。谁能帮我解决这个问题吗?

    +1

    您不能嵌套'

    '元素。 – Barmar

    +0

    :-) Django正在做这个魔术......它正在工作! –

    回答

    1

    您的表单正在使用data-id,在其中添加id并再试一次。

    <form method="post" action="" data-id="filter-form" id='filter-form'> 
    

    希望它有帮助。

    最好的问候,

    Hatjhie

    +0

    不建议编码,但不要疲劳。谢谢! –

    1

    更换你这样的代码:

    HTML:

    <form method="post" action="" data-id="filter-form" id="filter-form"> 
    //This is from Django's CSRF token 
    <input type='hidden' name='csrfmiddlewaretoken' value=.../> 
    
    <div class="form-group"> <div id="div_id_vacant" class="checkbox"> 
        <label for="id_vacant" class="">Is Vacant</label> 
        <input type="checkbox" name="vacant" class="checkboxinput" id="id_vacant" /> 
    </div></div> 
    
    ...more of the same inputs... 
    
    </form> 
    
    <hr/> 
    
    <button id="search-btn" class="btn btn-info" data-filter-leads-url="/leads/ajax/filter">Search</button> 
    <button id="download-btn" class="btn btn-default" data-filter-leads-url="/leads/csv">Download</button> 
    

    的jQuery:

    {Django CSRF code here} 
    
    var searchBtn = $("#search-btn"); 
    searchBtn.click(function() { 
        var form = $("#filter-form"); 
        $.ajax({ 
         url: searchBtn.attr("data-filter-leads-url"), 
         method: "POST", 
         data: form.serialize(), 
         dataType: 'json', 
         success: function (data) { 
          console.log(data) 
         }, 
         error: function (data) { 
          console.log("There was an error."); 
          console.log(data.error()) 
         } 
        }); 
    
    }); 
    
    相关问题