Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 如何发布包含对象数组的JSON请求?_Ajax_Json_Post_Serialization_Multipartform Data - Fatal编程技术网

Ajax 如何发布包含对象数组的JSON请求?

Ajax 如何发布包含对象数组的JSON请求?,ajax,json,post,serialization,multipartform-data,Ajax,Json,Post,Serialization,Multipartform Data,在服务器端,我有一个如下所示的方法: @POST @Path("/foods/{year}/{month}/{day}") @Consumes("multipart/mixed") @Produces("application/json; charset=UTF-8") @Transactional public boolean setFoodsForTheDay(@PathParam("year") int year, @PathParam("month") int month, @Pat

在服务器端,我有一个如下所示的方法:

@POST
@Path("/foods/{year}/{month}/{day}")
@Consumes("multipart/mixed")
@Produces("application/json; charset=UTF-8")
@Transactional
public boolean setFoodsForTheDay(@PathParam("year") int year, @PathParam("month") int month,
  @PathParam("day") int day, @Multipart(value = "foodList", type = MediaType.APPLICATION_JSON) Food[] foodList) {

  if (log.isDebugEnabled()) {
    log.debug("list size={}", foodList.size());
  }
  doStuff(foodList);

}
如果我将以下POST请求发送到/foods/2013/06/26,它将实际工作,并且数组将被正确解析:

Host: localhost:7777
Accept: application/json
Content-Type: multipart/mixed; boundary=---------------------------25819220131967
Content-Length: 226

-----------------------------25819220131967\r\n
Content-Disposition: form-data; name="foodList"\r\n
Content-Type: application/json\r\n
\r\n
[   {"id":null,"name":"Banana","recipe":null}   ]\r\n
-----------------------------25819220131967--\r\n
正如您所看到的,重要的是发送一个多部分/混合的(或者多部分/表单数据也可以工作),因为这样我可以设置部件的内容类型,并且它将得到正确的解析

这一切都有效。现在的问题是,我需要用jQuery(或任何其他Ajax工具)发送这个请求,看起来不可能发送多部分/混合?或者iframe有一些技巧,但仍然无法设置部件的内容类型


有人知道这个问题的解决方案吗?如何在JSON序列化中向服务器发送对象数组?

是的,您可以通过JQuery ajax发送多部分/混合,但必须添加额外的内容:

cache: false,
contentType: false,
processData: false,


$.ajax({
    url: 'php/test.php',
    data: {name: "test1", age 5},
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});

是的,您可以通过JQuery ajax发送多部分/混合,但必须添加额外的内容:

cache: false,
contentType: false,
processData: false,


$.ajax({
    url: 'php/test.php',
    data: {name: "test1", age 5},
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});

看起来jQuery不可能做到这一点,但是我确实找到了显示如何使用旧XMLHttpRequest做到这一点的方法

这是我现在的Javascript代码,它工作得非常好!:)


看起来jQuery不可能做到这一点,但是我确实找到了显示如何使用旧XMLHttpRequest做到这一点的方法

这是我现在的Javascript代码,它工作得非常好!:)


这似乎不起作用。在Chrome下,我会出现“无效媒体类型”错误,而在Firefox下,会出现一个很长的错误,就像“JavaScript组件没有一个名为“available”的方法一样。据我所知,如果我试图发送(例如)删除请求,而我的浏览器不支持该请求,这将是一个预期错误。。。然而,在这种情况下,我只发送了一个典型的POST请求。这似乎不起作用。在Chrome下,我会出现“无效媒体类型”错误,而在Firefox下,会出现一个很长的错误,就像“JavaScript组件没有一个名为“available”的方法一样。据我所知,如果我试图发送(例如)删除请求,而我的浏览器不支持该请求,这将是一个预期错误。。。然而,在这种情况下,我只发送一个典型的POST请求。