您好,欢迎访问沃航(武汉)科技有限公司官方网站
Ajax发送文件的方法
2017-08-31 10:00:00

大家好,关于Ajax,所有的前端工程师应该不会不熟悉吧。它通过异步传输实现低带宽下友好的用户体验。但是目前主流的Ajex调用方法不支持异步上传文件,小沃今天就介绍一下如何实现异步上传文件的方法。

小沃使用的方法是使用html5原生方法XMLHttpRequest();

XMLHttpRequest 是一个API, 它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。

XMLHttpRequest 是一个 JavaScript 对象,它最初由微软设计,随后被 Mozilla、Apple 和 Google采纳. 如今,该对象已经被 W3C组织标准化. 通过它,你可以很容易的取回一个URL上的资源数据. 尽管名字里有XML, 但 XMLHttpRequest 可以取回所有类型的数据资源,并不局限于XML。 而且除了HTTP ,它还支持file 和 ftp 协议。

这个方法的数据源是一个FormData所生成的对象。

生成对象的方法如下:

var fd = new FormData();

然后直接使用fd.append的方式来提交post参数,如:

fd.append('username', 'johndoe');

fd.append('id', 123456);

如果是提交文件类型,请使用

fd.append("file", $('file')[0].files[0]);

需要jquery库支持。


生成XMLHttpRequest();对象的方法如下:

var xhr = new XMLHttpRequest();

下面是这个函数的事件处理方法

xhr.addEventListener('loadstart', function() {//当请求开始时触发

}, true);

xhr.addEventListener('progress', function() {//当响应主体正在下载重复触发(约每隔50ms一次)

}, true);

xhr.addEventListener('abort', function() {//当请求中止时触发

}, true);

xhr.addEventListener('error', function() {//当请求因错误失败时触发。注意404等状态码不是error,因为此时响应仍然是成功完成的。

}, true);

xhr.addEventListener('load', function() {//当请求成功时触发

}, true);

xhr.addEventListener('timeout', function() {//当timeout属性指定的时间已经过去但响应依旧没有完成时触发

}, true);

xhr.addEventListener('loadend', function() {//在请求成功或者失败时触发;load、abort、error、timeout事件发生之后

}, true);

根据需要注册不同的监听函数。

xhr.open('POST', 'index.php?do=uploadfile', true);//是用于打开一个链接的,第三个参数为true说明是非阻塞方式。也就是说判断是否传输完成需要利用回调函数实现。但是执行了open,其实还没有开始正式执行。

xhr.send(fd);//执行了这句话后才开始执行的。


发送ajex后,返回的信息返回到了responseText属性中去。

下面是小沃写的一段代码,请过目:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>ajax异步上传文件</title>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
      function upload() {
        var fd = new FormData();
        fd.append("file", $("#file")[0].files[0]);
        var xhr = new XMLHttpRequest();
        xhr.addEventListener('load', function() {
            console.log(xhr.responseText);
        });
        xhr.open('POST', 'index.php?do=uploadfile', true);
        xhr.send(fd);
      }
    </script>
  </head>
  <body>
    <input id="file" name="file"><br />
    <button onclick="upload();">上传</button>
  </body>
</html>





联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn