我正在使用Malsup 的 JQuery Form 插件和 Spring MVC 来做一些 Ajax 查找。
我遇到了 IE 问题(惊喜)。
Javascript代码:
var options = {
type: "POST",
cache: false,
success: displayList,
error: errorList,
url: 'test.jsp',
dataType: 'json'
};
$('form').ajaxSubmit(options);
function displayPolicyList(responseText, statusText, xhr, $form)
{
alert(responseText); // Works in all browsers
}
function errorList(xhr, ajaxOptions, thrownError)
{
alert(xhr.responseText); // Fine in firefox etc, NULL in IE
}
弹簧代码:
@ResponseBody
public ResponseEntity<Map<String, String>> erroResponse()
{
Map<String, String> error = new TreeMap<String, String>();
error.put("error", message);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_PLAIN);
return new ResponseEntity<Map<String, String>>(error, responseHeaders,
HttpStatus.INTERNAL_SERVER_ERROR);
}
成功后,所有浏览器都可以正常工作。我可以毫无问题地读取和解析 JSON 响应。当我在 JSON 响应中返回 500 和错误消息时,就会出现问题。在 firefox、chrome 等中,一切正常,errorList 可以解析 JSON 响应。
然而,在 IE 中,JSON 为空。我可以在 JQuery Form 插件中看到我收到相同的跨源错误(无法访问响应文档:TypeError: Access is denied. ),详细信息如下:
但是,我没有访问跨域,因为它是单个应用程序。
在 JQuery Plugin 中,似乎是问题的块是:
function getDoc(frame) {
var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
return doc;
}
当我从控制器返回 HttpStatus.CREATED 时,它工作正常,但是来自服务器的任何失败事件都会导致上述函数抛出异常。
有任何想法吗?