我正在尝试实现这里给出的文件上传 API: <br>; Mediafire 文件上传</a>;
我成功上传了 Post data & Get data,但不知道如何发送 x-filename属性,根据 API 指南,该属性应为 Header data。
我的代码
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);
您的错误
无效状态错误:试图使用一个不可用或不再可用的对象
出现该错误的原因是,您必须在调用 open
之后**调用 setRequestHeader
。只需将 setRequestHeader
行移到 open
行下面(但在 send
之前)即可:
xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);
检查请求中是否确实显示了键值对:
在Chrome中,找到类似的地方:F12:开发工具> 网络选项卡> 无论您发送了什么请求> 响应头下的"查看源"。
根据您的测试工作流程,如果您添加的对不在那里,您可能只需要清除浏览器缓存。要验证浏览器使用的是最新代码,可以检查页面的源代码,在Chrome中可以找到类似的地方: F12: Developer Tools > Sources Tab > YourJavascriptSrc.js` 并检查你的代码。
但正如其他答案所说:
xhttp.setRequestHeader(key, value);
应在请求头中添加键值对,确保将其置于 open()
之后和 send()
之前即可。