使用formdata时如何在XMLHttpRequest中添加头数据?

Raj*_*ura 53 javascript xmlhttprequest form-data http-headers mediafire

我正在尝试实现文件上传API,这里给出:
Mediafire文件上传

我能成功上传后的数据获取数据,但不知道如何发送X-文件名的属性,这是为了将头数据作为API指南中给出.

我的代码:

xmlhttp=new XMLHttpRequest();
var formData = new FormData();

formData.append("Filedata", document.getElementById("myFile").files[0]);

var photoId = getCookie("user");
// formData.append("x-filename", photoId);            //tried this but doesn't work
// xmlhttp.setRequestHeader("x-filename", photoId);   //tried this too (gives error) [edited after diodeous' answer]

xmlhttp.onreadystatechange=function()
{
    alert("xhr status : "+xmlhttp.readyState);
}

var url = "http://www.mediafire.com/api/upload/upload.php?"+"session_token="+getCookie("mSession")+"&action_on_duplicate=keep";

xmlhttp.open("POST", url);
// xmlhttp.setRequestHeader("x-filename", photoId);   //tried this too, doesnt work. Infact nothing gets uploaded on mediafire.  [edited after apsillers' answer]
// cant get response due to same origin policy
xmlhttp.send(formData);
Run Code Online (Sandbox Code Playgroud)

aps*_*ers 89

你的错误

InvalidStateError:尝试使用不可用或不再可用的对象

出现因为你必须在打电话setRequestHeader 打电话open.只需将您的setRequestHeader线移到线下open(但之前send):

xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);
Run Code Online (Sandbox Code Playgroud)

  • 这清除了一点.请参阅[了解基于CORS的XMLHttpRequest](http://stackoverflow.com/questions/13400594/understanding-xmlhttprequest-over-cors-responsetext/13400954#13400954).同源策略允许"简单"请求到达客户端,然后决定客户端是否可以读取结果.在发送实际请求之前,使用"预检"请求验证"非简单"请求.添加非简单标头会将您的请求从简单更改为非简单.在这两种情况下,我都假设您无法从服务器读取响应? (4认同)

Dio*_*ane 37

使用: xmlhttp.setRequestHeader(key, value);