Spring MVC控制器的ajax方法

时间:2011-11-13 08:55:44

标签: ajax jquery spring-mvc

我有一些使用jQuery向服务器发送AJAX请求的Web应用程序。其中一个方法(在控制器中)返回一个ModelAndView对象,该对象可以是一个html代码或JSON对象 - 取决于存在的错误。 thid方法的输入参数是JSON数组(表单)。 方法定义:

@RequestMapping(value = "/generate", method = RequestMethod.POST, headers = BaseController.AJAX_HEADER)
public ModelAndView generate(@RequestBody HandlingReportForm form, HttpServletResponse response) {...}

jQuery方法如下:

jQuery.ajax({
    'type': 'POST',
    'url': url,
    'contentType': 'application/json',
    'data': JSON.stringify(data),
    'dataType': 'json',
    'success': callback,
    error : function(jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    },
    complete : function(jqXHR, textStatus) {
        alert(textStatus);
    }
});

服务器返回JSON数组时没有问题。服务器的响应是html时出现问题。我收到一个“parseerror”异常。我想jQuery试图将响应字符串解析为JSON。我对吗? 如何禁用自动解析?还有其他方法可以实现这种通用方法吗?

谢谢 谢谢

1 个答案:

答案 0 :(得分:1)

dataType被称为json,因此JQuery会尝试将响应解释为json对象。

JQuery Ajax文档 -

dataType - “json”:将响应计算为JSON并返回JavaScript对象。在jQuery 1.4中,JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。)

最好返回单一的响应格式。

您也可以排除dataType参数 如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,以及任何东西else将作为字符串返回。)