一尘不染

如何使用Django将JSON序列化数据从表单发送到Ajax

ajax

目前,我正在以这种方式通过代码发送数据,并且可以正常工作,但是如何在json中发送整个表单呢?

代码:

 $.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

我想使用formdata json 发送和检索包括 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

但是,由于某些原因,这不起作用。我如何使它工作?


阅读 249

收藏
2020-07-26

共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
2020-07-26