2

我正在尝试使用 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

4

1 回答 1

0

用于 IE(版本低于 11)的 IframeIO 库创建一个 iframe,在文件上传后将 HTTP 响应发布到该 iframe。

但是 IE9/10 中的 iframe(不确定是 8 还是 11)不接受内容类型为 JSON 的 HTTP 响应。IE9/10 的响应内容类型需要更改为“text/plain”,以使其正常工作。

于 2013-11-13T04:16:10.463 回答