jQuery,Ajax没有返回Spring MVC

时间:2015-06-08 11:10:01

标签: jquery ajax spring

我的应用程序正在抛出JSON.parse error,因为Spring MVC正在返回XMLHttpRequest正在接收的视图。

 $("#formId").submit(function( event ){
        //var data = JSON.stringify($(this).serializeObject());
        var data = JSON.stringify({"dateSmoked":"26/05/2015 19:00", "excessiveness":10, "intakeMethod":"bong", "comments":"ping"});
        alert(data);
        $.ajax({
            url: $(this).attr('action'),
            type: 'POST',
            data: data,
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (data) {
                alert('Client created!! :-)')
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('An error has occured!! :-(');
                alert(jqXHR.responseText);
                alert(textStatus);
                alert(errorThrown);
            }
        })
        event.preventDefault();
    });

上面的代码向以下Controller发送POST请求:

@RequestMapping(method=RequestMethod.POST, headers="Content-Type=application/json")
@ResponseStatus(HttpStatus.CREATED)
public String createSmokeEvent(@RequestBody SmokeEvent evt)
{
    Account account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    System.out.println("Added");
    return "redirect:/users/"+account.getUsername();
}

并且控制器返回视图 - "redirect:/users/"+account.getUsername()"。我发送的XMLHttpRequest似乎试图尝试解析来自服务器的响应,该响应来自正在返回的服务器的html。

我基本上希望应用程序将POST请求发送到服务器,让服务器处理所有重定向到页面的内容。没有回应。我不希望jQuery尝试解析控制器返回的任何内容。

目前,代码总是在尝试JSON.parse HTML响应时失败。

这可能吗?

3 个答案:

答案 0 :(得分:0)

不确定您的要求。基本上你的控制器应该返回一个有效的JSON字符串:

@RequestMapping(method=RequestMethod.POST, headers="Content-Type=application/json")
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public Map createSmokeEvent(@RequestBody SmokeEvent evt)
{
    Account account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    System.out.println("Added");
    Map m = new LinkedHashMap();
    m.put("result", "ok");
    return m;
}

答案 1 :(得分:0)

我不熟悉Spring,但我非常熟悉jQuery并使用它进行AJAX调用。它试图将来自AJAX调用的响应解析为JSON,因为您已经告诉它(使用此选项):

dataType: 'json',

如果您不打算从服务器返回JSON以响应请求,请不要告诉jQuery期望JSON,并且它不会尝试解析它。您可以指定正确的dataType以匹配响应(可能是' html'基于您对问题的描述)或者根本不指定dataType并让jQuery猜测它应该如何处理它。

答案 2 :(得分:0)

ajax中的数据类型必须是json,

 dataType: 'json'

然后在ajax成功下面使用这个,

success: function(response) {
    if (response.redirect) {
        // data.redirect contains the string URL to redirect to
        window.location.href = data.redirect;
    }
}

控制器:

@RequestMapping(method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody String createSmokeEvent(@RequestBody SmokeEvent evt) {
   Account account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
   System.out.println("Added");
   return "redirect:/users/"+account.getUsername();
}