2017-06-11 70 views
0

目前,我通過代碼以這種方式發送數據並且它正在工作,但是如何將整個表單發送到json?如何使用django將json序列化數據從表單發送到ajax

代碼:

$.ajax({ 
     url : window.location.href, // the endpoint,commonly same url 
     type : "POST", // http method 
     data : { csrfmiddlewaretoken : csrftoken, 
     email : email, 
     password : password, 
     username : username, 
     dob : dob, 
}, // data sent with the post request 

我想發送和檢索利用一切JSON FORMDATA包括csrfmiddlewaretoken

我已經試過類似的東西:

var formData = new FormData($('#my_form'); 
    formData.append('csrfmiddlewaretoken', '{{ csrf_token }}'); 

$.ajax({ 
     url : window.location.href, // the endpoint,commonly same url 
     type : "POST", // http method 
     data : formData, // data sent with the post request 

但是,這並不能出於某種原因。我怎樣才能使它工作?

回答

1

您需要發送json序列化表單數據作爲一個參數和csrf標記作爲另一個參數,因爲每個POST請求都需要一個csrf標記。

csrfmiddlewaretoken = $("#add_member_Form").find("input[name='csrfmiddlewaretoken']").val(); 
    formData = $('#add_member_Form').serializeArray(); 
    formData = JSON.stringify(formData); 
    $.ajax({ 
     url : url, 
     data : { 
      "csrfmiddlewaretoken" : csrfmiddlewaretoken, 
      "formData" : formData 
     }, 
     method: "POST", 
     dataType : "json", 

在您的視圖的服務器端,您需要反序列化數據。

form_data_dict = {} 
form_data_list = json.loads(form_data) 
for field in form_data_list: 
    form_data_dict[field["name"]] = field["value"] 
return form_data_dict 
0

你可以搶在jQuery中使用serializeArray功能表單數據,然後將其轉換成字典,並作爲發送POST數據。

serializeArray功能輸出會是這樣的,

{ 
    'name': 'the_name', 
    'value': 'the_value' 
} 

然後,你就必須把它轉換到字典或JSON格式。寫的是一個全球性的功能,

function objectifyForm(formArray) { 
    var returnArray = {}; 
    for (var i=0;i<formArray.length;i++) { 
     if (formArray[i].value) { 
      returnArray[formArray[i].name] = formArray[i].value; 
     } 
    } 
    return returnArray; 
} 

呼叫它時,你必須抓住表單數據,

var formData = $('#my_form').serializeArray(); 
formData = objectifyForm(formData); 
$.ajax({ 
     url : window.location.href, // the endpoint,commonly same url 
     type : "POST", // http method 
     data : formData, 
     success: blaah, 
     error: bleeh, 
    }); 

這將是更努力,不必每次解碼字典從服務器端。

相關問題