0

我正在使用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. ),详细信息如下:

访问被拒绝。关于 IE 中的 jquery.form.js

但是,我没有访问跨域,因为它是单个应用程序。

在 JQuery Plugin 中,似乎是问题的块是:

function getDoc(frame) {
        var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
        return doc;
    }

当我从控制器返回 HttpStatus.CREATED 时,它工作正常,但是来自服务器的任何失败事件都会导致上述函数抛出异常。

有任何想法吗?

4

1 回答 1

0

我收到了相同的错误消息,因为我的响应包含以下 http 标头:

X-Frame-Options: DENY

删除它或将标题值更改为 SAMEORIGIN 为我解决了这个问题。

更多阅读:http: //blog.mozilla.org/security/2010/09/08/x-frame-options/

于 2013-02-13T14:18:10.787 回答