简体   繁体   English

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

[英]How to add header data in XMLHttpRequest when using formdata?

I'm trying to implement a file upload API, given here : 我正在尝试实现一个文件上传API,在这里给出:
Mediafire file Upload Mediafire文件上传

I am successfully able to upload the Post data & Get data , but have no clue how to send the x-filename attribute, which is meant to be Header data as given in API guide. 我已成功上传Post数据获取数据 ,但不知道如何发送x-filename属性,这是API指南中给出的Header数据

My Code : 我的代码:

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);

Your error 你的错误

InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable InvalidStateError:尝试使用不可用或不再可用的对象

appears because you must call setRequestHeader after calling open . 出现是因为您必须调用open 调用setRequestHeader Simply move your setRequestHeader line below your open line (but before send ): 只需将您的setRequestHeader行移到open行下方(但在send之前):

xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);

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

Check to see if the key-value pair is actually showing up in the request: 检查键值对是否实际显示在请求中:

In Chrome , found somewhere like: F12: Developer Tools > Network Tab > Whatever request you have sent > "view source" under Response Headers Chrome中 ,找到类似的地方: F12: Developer Tools > Network Tab > Whatever request you have sent > "view source" under Response Headers

Depending on your testing workflow, if whatever pair you added isn't there, you may just need to clear your browser cache. 根据您的测试工作流程,如果您添加的任何对不存在,您可能只需要清除浏览器缓存。 To verify that your browser is using your most up-to-date code, you can check the page's sources, in Chrome this is found somewhere like: F12: Developer Tools > Sources Tab > YourJavascriptSrc.js and check your code. 要验证您的浏览器是否使用了最新的代码,您可以查看该页面的来源,在Chrome中可以找到以下内容: F12: Developer Tools > Sources Tab > YourJavascriptSrc.js并检查您的代码。

But as other answers have said: 但正如其他答案所说:

xhttp.setRequestHeader(key, value);

should add a key-value pair to your request header, just make sure to place it after your open() and before your send() 应该在您的请求标头中添加一个键值对,只需确保将其放在open()send()之前

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM