如何使用ajax发送POST请求

时间:2017-04-19 12:46:51

标签: javascript java jquery json post

我需要从表中获取数据,将其分配到数组中并通过Json将其发送到我的Java控制器,最后返回模型和视图。但是,由于我的控制器返回页面,此请求不能是ajax。

我这样做就是$ .post文档:

var orders = new Array();
$("#table-order tbody tr").each(function (){
        var col = $(this).children();

        if($(this).find('input').is(':checked')) {
         var order = {
           'number' : $(col[0]).text(),
           'desc' : $(col[1]).text(),
           'obs' : $(col[2]).text()     
          };
         orders.push(order);
        }
});

$.post( "sendToPrint", { array: JSON.stringify(orders) }, function( response ) {
          console.log( response );            
}, "json");

我的控制器:

@RequestMapping(value="/sendToPrint", method = RequestMethod.POST, consumes = "application/json;charset=UTF-8", produces = "application/json;charset=UTF-8")
@Transactional("productTransactionManager")
public ModelAndView imprimir(@RequestBody String ordens) {
    ModelAndView mv = new ModelAndView("impressao/impressao");
    Gson gson = new Gson();
    List<OrdemServico> listaNova =  new ArrayList<>();
    ArrayList<OrdemServico> listaOrdens = (ArrayList<OrdemServico>) gson.fromJson(ordens, new TypeToken<ArrayList<OrdemServico>>(){}.getType());
    for (OrdemServico ordemServico : listaOrdens) {
         int mes = LocalDateTime.now().getMonthValue();
         int ano = LocalDateTime.now().getYear();
         int dia = LocalDateTime.now().getDayOfMonth();
         LocalDateTime dataHora = LocalDateTime.of(ano, mes, dia, 0, 0, 0);
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
         String data = dataHora.format(formatter);
         ordemServico.setData(data);
        listaNova.add(ordemServico);
    }
    mv.addObject("lista", listaNova);
    return mv;
}

返回错误:

  

415(不支持的媒体类型)

2 个答案:

答案 0 :(得分:1)

您可以使用类似的javascript发布数据;

var xhr = new XMLHttpRequest();
xhr.open("POST", url , TRUE);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({value:value}));

答案 1 :(得分:0)

出现问题是因为您已将JSON指定为此控制器将使用的数据类型,并且您在ajax调用中传递了不完整的信息。您需要为ajax调用添加必要的标头。他们是:

headers: { 
    'Accept': 'application/json',
    'Content-Type': 'application/json' 
},