我想使用XMLHTTRequest for Safari 5.1上传文件并在POST请求中传递参数。如何实现?它应该是普通的javascript而不使用任何API而我这样做是因为Safari不支持FileReader in 5.1版本。
var fd = new FormData();
fd.append('file', $files[i]);
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", function(){alert("Done!");}, false);
xhr.open("POST", url.getUrl('myurl'));
xhr.send(fd);
上面的代码是否正确?如何将参数传递给POST请求。
答案 0 :(得分:0)
尝试if( window.FormData === undefined ) or if( window.FormData !== undefined )
。
了解更多参考资料click here
你也应该试试这个!
<script>
var client = new XMLHttpRequest();
function upload()
{
var file = document.getElementById("uploadfile");
/* Create a FormData instance */
var fd = new FormData();
/* Add the file */
fd.append("upload", file.files[0]);
client.open("post",url.getUrl('myurl'), true);
client.setRequestHeader("Content-Type", "multipart/form-data");
client.send(formData); /* Send to server */
}
/* Check the response status */
client.onreadystatechange = function()
{
if (client.readyState == 4 && client.status == 200)
{
alert(client.statusText);
}
}
</script>
作为FormData,send()one和upload属性(及其onprogress事件)的能力都是XMLHttpRequest level 2的一部分,你可以测试.upload以查看你是否有2级。没有Mac方便,但功能(遗憾的是,但正确)对Opera 11.50返回false(对于Firefox 4也是如此)。
答案 1 :(得分:0)
代码看起来不错。 如果要将其他参数传递给POST,则必须将它们添加到FormData。
var fd = new FormData();
// here the POST parameters
fd.append('parameter1', 'XXXX' );
fd.append('parameter2', 'YYYY' );
// The rest of your code
fd.append('file', $files[i]);
...
编辑:我不确定Safari 5.1是否支持此功能