【问题标题】:Ajax POST fails with Spring controller but no server errorAjax POST 使用 Spring 控制器失败,但没有服务器错误
【发布时间】:2015-12-03 12:07:52
【问题描述】:

我正在向我的 Spring MVC 控制器发送一个 POST 请求。我已经调整了好几个小时的代码,并从控制器中收到了各种错误,例如 400、404 或 415。

最后,现在我的 POST 请求正在运行(因为控制器将所有数据记录到控制台),但 Ajax successcallback 从未触发,但 fail 检查功能始终是。

我的 Ajax 请求:

        $.ajax({
                'type': 'POST',
                'url': '/iQuality/post-test',
                'data': $("#wizard-form").serializeJSON(), 
                'dataType': 'json',
                'headers': {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json' 
                },
                'success': function(){
                    console.log('mandarina');
                }
            })
            .fail(alert("Error!"));

我的 Spring 控制器:

@RequestMapping(value = "/post-test", method = RequestMethod.POST, headers = { "Content-type=application/json" })
@ResponseStatus(value = HttpStatus.OK)
private @ResponseBody void handleWizardPost(@RequestBody WizardForm1 wf){

    logger.debug("[post-test] : Called route");

    logger.info(wf.getSistema());
    logger.info(wf.getNombrePase());
    logger.info(wf.getEsAtipico());

}

顺便说一句,控制器应该发送一个空响应(我希望视图保持在同一页面中,不刷新页面)。

【问题讨论】:

  • 显示什么错误码?您是否在启用 csrf 的情况下使用 spring security?
  • 这是响应数据类型的问题。请参阅下面的答案。
  • 你有 dataType:"json" 并且你没有从你的控制器生成任何 json。

标签: jquery spring post


【解决方案1】:

post 参数包括:

'dataType': 'json',

您的控制器可能没有以正确格式的json 字符串响应,然后jQuery 又无法将响应解析为json,并且您的success 回调永远不会被调用。 如果您的回复为空,请尝试发送'{}',它会解决问题。

或者你可以从你的参数中删除'dataType': 'json',它将默认为'string,并且jQuery不会尝试解析它,并且会调用你的success回调。

【讨论】:

  • 这很奇怪......我按照你的建议做了,现在成功和失败函数都被执行了!我尝试了同样的方法,并从控制器的方法签名中删除了@ResponseBody,我得到了相同的结果。
猜你喜欢
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
相关资源
最近更新 更多