您的位置:首页 > 其它

IE10 ajaxupload iframe.contentDocument对象无法访问

2016-01-21 17:37 211 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/kangzhiwang/article/details/50556699

在IE10中使用ajaxupload.js(不跨域),一直报iframe.contentDocument无法访问。

ajaxupload.js中,_createForm如下:注意

settings.data.ajax_token = 1;
为ajax请求,如果出错响应json。否则是html请求,如果出错响应html(error.jsp)

_createForm: function (iframe) {
var settings = this._settings;

// We can't use the following code in IE6
// var form = document.createElement('form');
// form.setAttribute('method', 'post');
// form.setAttribute('enctype', 'multipart/form-data');
// Because in this case file won't be attached to request
var form = toElement('<form method="post" enctype="multipart/form-data"></form>');

form.setAttribute('action', settings.action);
form.setAttribute('target', iframe.name);
form.style.display = 'none';
document.body.appendChild(form);

settings.data.ajax_token = 1;

// Create hidden input element for each data key
for (var prop in settings.data) {
if (settings.data.hasOwnProperty(prop)) {
var el = document.createElement("input");
el.setAttribute('type', 'hidden');
el.setAttribute('name', prop);
el.setAttribute('value', settings.data[prop]);
form.appendChild(el);
}
}
return form;
},

ajaxupload.js中,获取Response相应的代码:

_getResponse: function (iframe, file) {
// getting response
var toDeleteFlag = false,
self = this,
settings = this._settings;

addEvent(iframe, 'load', function () {

if ( // For Safari
iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
// For FF, IE
iframe.src == "javascript:'<html></html>';") {
// First time around, do not delete.
// We reload to blank page, so that reloading main page
// does not re-submit the post.

if (toDeleteFlag) {
// Fix busy state in FF3
setTimeout(function () {
removeNode(iframe);
},
0);
}

return;
}

var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;

// fixing Opera 9.26,10.00
if (doc.readyState && doc.readyState != 'complete') .........................

原来是java端设置的HttpServletResponse问题:
原来的java代码:

private void processAjaxError(HttpServletRequest request, HttpServletResponse response, Exception e) {
OperInfo operInfo = new OperInfo();
operInfo.setIsOk(false);
if (e instanceof BusiException|| e instanceof NoRollBackException) {
response.setStatus(500);
operInfo.setInfo(e.getMessage());
} else {

3ff7
response.setStatus(500);
operInfo.setInfo("系统异常,请联系系统管理员。");
operInfo.setData("detail", ExceptionUtils.getFullStackTrace(e));
logger.error("系统异常", e);
}
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
try {
response.getWriter().println(JSONObject.fromObject(operInfo).toString());
response.getWriter().flush();
response.getWriter().close();
} catch (IOException ex) {
throw new RuntimeException(ex);
}

重新设置:
**// response.setStatus(400);
response.setContentType(“text/html”);**

改后代码:

private void processAjaxError(HttpServletRequest request, HttpServletResponse response, Exception e) {

OperInfo operInfo = new OperInfo();
operInfo.setIsOk(false);
if (e instanceof BusiException|| e instanceof NoRollBackException) {
//          response.setStatus(400);
operInfo.setInfo(e.getMessage());
} else {
//          response.setStatus(500);
operInfo.setInfo("系统异常,请联系系统管理员。");
operInfo.setData("detail", ExceptionUtils.getFullStackTrace(e));
logger.error("系统异常", e);
}
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
try {
response.getWriter().println(JSONObject.fromObject(operInfo).toString());
response.getWriter().flush();
response.getWriter().close();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}

主要是http协议问题,还不是很懂,先记住了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐