Я использую плагин 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 без каких-либо проблем. Проблема возникает, когда я возвращаю 500 с моими сообщениями об ошибках в ответе JSON. В firefox, chrome и т. д. все работает, как и ожидалось, и errorList может анализировать ответ JSON.
Однако в IE JSON имеет значение null. Я вижу в подключаемом модуле JQuery Form, что получаю ту же ошибку перекрестного происхождения (не удается получить доступ к документу ответа: TypeError: Доступ запрещен.), подробно описанный здесь:
Отказано в доступе. на jquery.form.js в IE
Однако я не получаю доступ к междоменному доступу, поскольку это одно приложение.
В плагине JQuery блок, который кажется проблемой:
function getDoc(frame) {
var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
return doc;
}
Когда я возвращаю HttpStatus.CREATED из контроллера, он работает нормально, но любое сбойное событие с сервера приводит к тому, что вышеуказанная функция вызывает исключение.
Есть идеи?