我的应用程序正在抛出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响应时失败。
这可能吗?
答案 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();
}