django ajax formdata,Django后端FormData()对象总是空

我想通过AJAX(只是JS,没有jQuery)上传HTML表单。表单由我的模板通过添加三个组件组装而成:csrf标记,ModelForm和常规Django表单(forms.Form)。模型表单{{form.as_p}}包含表单的可见部分,而{{order_form}}表单包含一些隐藏的字段。我的模板的形式部分看起来是这样的:Django后端FormData()对象总是空

{% csrf_token %}

{{ form.as_p }}

{{ other_form }}

我已经尝试从

标签删除加密类型(我在另一个问题的答复读取FORMDATA()自动将此),但无济于事。

当按下submit按钮时,调用JS函数submitBlodEntryForm(),传递表单ID和url以用于AJAX请求。该JS功能的代码在这里:

function submitThisForm(form_ID, url){

var submit_form = document.getElementById(form_ID);

var formData = new FormData(document.getElementById(form_ID));

httpRequest = new XMLHttpRequest();

if (!httpRequest){

alert("Giving up, cannot create an XMLHTTP instance.");

return false;

};

var url = "/submit_blog_entry/";

var sendCSRFtoken = "csrfmiddlewaretoken="+String(getCookie('csrftoken'));

var sendContent = sendCSRFtoken+"&"+formData;

httpRequest.onreadystatechange = alertContents;

httpRequest.open('POST', url, true);

httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

//httpRequest.send();

httpRequest.send(sendContent);

// alternatively: httpRequest.send(formData);

}

AJAX请求被提交给服务器并且被服务器接收(一个Django视图)。如果我没有手动添加上面的JS代码(变量sendContent)中显示的csrf标记并只发送formData,我会得到一个403错误,显然是因为服务器找不到标记。它应该是这样的形式,虽然部分...

当我接收到的数据绑定到相应的表单,验证失败:

form = ThisForm(request.POST)

if form.is_valid():

#do something

如果我打印的内容是在request.POST,我在终端中获得以下内容:

显然,FormData对象是空的。我还以为这是因为我得到两个必填字段以下两个错误在我的形式(通过使用form.errors.as_data()):

[ValidationError(['This field is required.'])]

到底哪里出问题了?我搞乱了模板,FormData()不生成有用的数据吗?我错误地创建了AJAX请求吗?或者是服务器端的问题(尽管目前我几乎没有做任何事情)?

谢谢任何​​帮助,非常感谢!

2016-04-03

S. Ju.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 后端可以使用 Servlet 来接收表单数据,代码示例如下: ``` @WebServlet("/formdata") public class FormDataServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String age = request.getParameter("age"); // ... 其他处理 } } ``` 此外,也可以使用框架如 Spring MVC 来接收表单数据。 ### 回答2: Java作为一种非常流行的编程语言,在后端接受前端传输的数据时有着卓越的表现。对于接收前端发来的formdata数据,在Java后端中,通常使用HttpServletRequest对象进行处理,通过该对象中提供的方法来获取前端传输来的数据。 HttpServletRequest对象是java.servlet.http包中的一个接口,是web服务器向servlet提供请求信息的一种方式,通过该对象可以获取前端传来的数据。在接收formdata,通常需要获取输入流中的数据流,然后在后端利用相应的解析器(如JSON解析器)将数据转化为Java对象以便于后续的处理。 首先,需要从HttpServletRequest对象中获取输入流,在通过Java提供的BufferedReader类似的工具类读取数据流,将其转为string来进行进一步的解析。以下是示例代码: ```java @RequestMapping(value = "/postData", method = RequestMethod.POST) @ResponseBody public String postData(HttpServletRequest request) throws IOException { StringBuilder buffer = new StringBuilder(); BufferedReader reader = request.getReader(); String line; while ((line = reader.readLine()) != null) { buffer.append(line); } return buffer.toString(); } ``` 其中,使用注解@RequestMapping声明该方法接受POST请求,并将前端发送的formdata数据以字符串的形式返回。在实际应用中,需要根据前端发送的数据格式进行相应的解析,例如,当前端发送的是json格式的数据时,可以使用Java中的Gson解析库将其解析成相应的Java对象,以下是示例代码: ```java @RequestMapping(value = "/postData", method = RequestMethod.POST) @ResponseBody public User postData(@RequestBody String json) { Gson gson = new Gson(); User user = gson.fromJson(json, User.class); return user; } ``` 在上面的示例中,@RequestBody注解用于帮助框架自动将请求的body中的数据转换为Java对象,其中Gson解析库用来将前端发送的json格式的数据解析成相应的User对象,最终返回该对象。需要注意的是,@RequestBody注解只能使用在POST请求中,由于GET请求和POST请求的数据传输方式是不同的。 总之,Java后端接收formdata数据非常简单,可以使用HttpServletRequest对象和具体的解析库来将前端发送来的数据转化为Java对象进行处理,这样就可以顺利的完成前后端数据交互了。 ### 回答3: Java后端可以通过使用Spring框架中的MultipartFile类来接收formdata数据。这个类可以处理包含文件上传的form表单数据,并将上传的文件存储在服务器中。 在Spring MVC中使用MultipartFile需要使用@ModelAttribute注解来将它绑定到表单提交的数据上。同时,还需要使用@RequestParam注解来指定表单中文件上传控件的名称。 具体的代码如下: ``` @PostMapping("/upload") public String handleFormUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { // 处理上传的文件 String fileName = file.getOriginalFilename(); byte[] bytes = file.getBytes(); // 存储文件到服务器 // ... return "上传成功"; } else { return "请选择文件"; } } ``` 在上述代码中,@RequestParam注解指定了表单中文件上传控件的名称为"file"。MultipartFile类的getOriginalFilename方法可以获取上传文件的原始文件名,getBytes方法可以获取文件的字节数据。 在文件上传完成后,可以调用自己的代码将文件存储在服务器的指定目录中。 总的来说,接收formdata数据的步骤是获取表单提交的数据,并将表单数据中的文件流解析出来,最后保存到服务器指定的路径下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值