我正在尝试使用 goog.net.IFrameIO 上传文件并在处理上传的文件后从服务器获取 JSON 响应。它在 Chrome 和 Safari 上运行良好,但不适用于 IE9,在 IE9 中出现“拒绝访问内容文档”错误,然后提示保存/打开 json 响应。这是我拥有的html代码和js代码-
HTML 代码:
<form action="/" enctype="multipart/form-data" method="POST" id="upload-form">
<input type="file" name="selected-file" id="selected-file">
<div role="button" class="test-button>Upload</div>
</form>
JS代码:
test.prototype.uploadFile = function() {
// Send the form submission to the server using IframeIo to make it feel like
// AJAX.
var form = /** @type {HTMLFormElement} */ (goog.dom.getRequiredElement(
'upload-form'));
var io = new goog.net.IframeIo();
goog.events.listen(io, goog.net.EventType.COMPLETE, goog.bind(this.processResponse_, this, io));
io.sendFromForm(form, '/uploadfile');
}
test.prototype.processResponse = function(io) {
if (!io.isSuccess()) {
alert('iframeio error encountered:' + io.getLastError());
return;
}
var response = null;
try {
response = io.getResponseJson();
..
} catch (error) {
....
}
我试图只使用闭包解决方案而不是其他库。我也经历了Internet Explorer 的后备 AJAX 文件上传中的问题,但无法评论已接受的答案。
[疑难解答]:我看到 goog.net.IframeIo.prototype.onIeReadyStateChange_() 方法以就绪状态调用 - 加载、交互然后完成,但无法从为 IE 创建的 iframe 获取内容文档。
HTTP 请求标头:Accept: text/html, application/xhtml+xml, / Content-Type: multipart/form-data Accept-Encoding: gzip, deflate
HTTP响应头:X-Frame-Options:SAMEORIGIN Content-Type:application/json;字符集=utf-8