IE使用XMLHttpRequest在重定向上发送错误的内容类型

时间:2016-09-06 22:55:50

标签: internet-explorer redirect post xmlhttprequest multipartform-data

这是我第一次直接使用XMLHttpRequest。希望有人可以给我一个提示

方案: 我正在尝试使用XMLHttpRequest将文件上传到我的服务器。要做到这一点我:

使用XMLHttpRequest将表单(multipart)发布到我的服务器。此POST按预期工作;文件已上传,未显示错误。

然后我的服务器响应重定向。我可以看到Internet Explorer使用GET执行重定向,但内容类型仍然是“multipart”(形成第一个请求)。这会导致我的服务器崩溃。内容类型设置为multipart,但不发送要解析的实际信息。

完全相同的代码在Chrome和Firefox中完美运行,但不适用于IE。

HTML表单

<form action="my path" enctype="multipart/form-data" method="post">
  <input  name="import[my_file]" type="file">
</form>

ROR Code非常直接fw

class MyController < ApplicationController

  def my_action
    file = params[:import][:my_file]
    ...
    redirect_to :action => :other_action
  end

  def other_action
    render :text => 'Just an ilustration'
  end
end

Javascript代码

var form = $('<The form containing the file input>')[0];
var formData = new FormData(form);
var url = $(this).attr('action');

var request = new XMLHttpRequest();
var response = request.open('POST', url, true);

request.onreadystatechange = function() {
  if (request.readyState == XMLHttpRequest.DONE) {
    // Code when it is done
  }
}

request.send(formData);
return false;

这两个请求:POST上传文件和GET重定向:

enter image description here

这些是POST标题,请求和响应:

Post Request

Post Response

这些是GET标头,请求和响应。您可以看到内容类型如何设置为multipart-formdata,这是不正确的。

Get Request Get Response

为了确保重定向和XMLHttpRequest在某种程度上是这个问题的“原因”,我摆脱了XMLHttpRequest代码并让表单正常运行。重定向的GET调用具有正确的内容类型(text / html)。它工作正常。

我知道如何使用XMLHttpRequest让POST在POST后的重定向的GET请求中使用正确的内容类型?

(对不起超长的帖子)

0 个答案:

没有答案