XMLHttpRequest上传带参数的文件

时间:2015-03-27 06:56:11

标签: javascript

我想使用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请求。

2 个答案:

答案 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是否支持此功能