这是我第一次直接使用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重定向:
这些是POST标题,请求和响应:
这些是GET标头,请求和响应。您可以看到内容类型如何设置为multipart-formdata,这是不正确的。
为了确保重定向和XMLHttpRequest在某种程度上是这个问题的“原因”,我摆脱了XMLHttpRequest代码并让表单正常运行。重定向的GET调用具有正确的内容类型(text / html)。它工作正常。
我知道如何使用XMLHttpRequest让POST在POST后的重定向的GET请求中使用正确的内容类型?
(对不起超长的帖子)