如何在没有 ajax 的情况下发送 POST 请求

Posted

技术标签:

【中文标题】如何在没有 ajax 的情况下发送 POST 请求【英文标题】:How to send a POST Request withou ajax 【发布时间】:2017-09-15 17:02:01 【问题描述】:

我需要从表中获取数据,将其分配到一个数组中,然后通过 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(不支持的媒体类型)

【问题讨论】:

Jquery - How to make $.post() use contentType=application/json?的可能重复 “如何在没有 AJAX 的情况下发送 post 请求?” ~ 使用输入框并提交(1990 风格) 不是重复的帖子,因为在我的情况下我不能使用$ ajax 由于我返回模型和视图,我需要一个非 ajax 请求,而且我也不是发送表单而是发送表中的数据。 朋友们有一个大问题,我不能只提交一个表格,因为我只需要发送用户选择的行的数据,而不需要ajax lol 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何在没有 ajax 的情况下发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

JS——AJAX

我的 jquery AJAX POST 请求无需发送真实性令牌(Rails)即可工作

如何使用 ajax Post 方法在没有 jQuery 的情况下提交用户输入

Django 如何让ajax的POST方法带上CSRF令牌

ajax中,发送请求的类型

ajax发送请求