2013-01-31 94 views
0

我使用Malsup's JQuery Form plugin与Spring MVC做一些Ajax查找。在Internet Explorer中JQuery Form JSON响应数据NULL

我遇到了与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 
} 

Spring代码:

@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的表单插件看到(无法访问响应文件:类型错误:访问被拒绝 )这里详细:

Access is denied. on jquery.form.js in IE

不过,我不访问跨因为它是一个单一的应用程序。

在jQuery插件,似乎是问题的块是:

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

当我回到HttpStatus.CREATED从它工作正常的控制器,但服务器的任何故障事件导致了上述函数抛出异常。

任何想法?

+0

请问您提交的形式有哪些正在提交文件域? – JAAulde

+0

它的确如此。这一切都可以在Controller获得成功响应的情况下运行。问题所在的地方是当我根据对提交的数据的一些内部验证从控制器返回500时。 – user2028936

+0

您是否对“正常”响应进行了特殊处理,使得JSON在TEXTAREA中返回?当我用这个插件提交表单时,哪个表单有一个文件输入并且来自IE,我必须将JSON响应包装在TEXTAREA中,因为IE需要伪阿贾克斯(通过iframe)。您需要在500响应中添加相同的特殊处理。 – JAAulde

回答