javascript
  • jquery
  • ajax
  • django
  • forms
  • 2017-08-01 33 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()) 
         } 
        }); 
    
    }); 
    
    相關問題