xhr与FormData对象的使用
xhr的timeout和ontimeout和onload:
timeout和ontimeout:
注①:-send()方法用于发送http请求,如果是异步请求(默认)则此方法会在请求后立即返回;如果是同步请求,则此方法直到响应到达后才会返回
-语法:XMLHttpRequest.send() 【xhr.send()】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 发送一个get请求 var xhr =new XMLHttpRequest(); xhr.open('get','接口'); 设置请求超时时间(毫秒单位) -如果超过指定时间,请求会被取消,后续的操作不执行 xhr.timeout = 30000; xhr.ontimeout = function () { alert('超时了') };
xhr.send(); xhr.onreadystatechange = function () { if(xhr.readyState === 4 & xhr.status === 200) { console.log(xhr.responseText); } };
|
onload:
1 2 3 4 5 6 7 8 9 10 11 12
| 发送请求 var xhr = new XMLHttpRequest(); xhr.open('get','接口'); xhr.send(); 响应处理: - xhr中提供了onload事件,直接用于表示xhr.readyState为4的情况,用于简化响应处理操作 - 但是还是需要进行xhr.status的判断处理 xhr.onload = function () { if (xhr.status === 200){ console.log(xhr.responseText); } };
|
使用FormData模拟表单进行自定义数据上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1创建一个空的FormData对象 var fd = new FormData();
2给fd添加数据,使用fd的append() fd.append('name','jack'); fd.append('age',18);
注:无法直接输出fd查看数据,需要使用get方法操作 Eg: consol.log(fd.get('name'));
3通过ajax发送给对应接口 -注:FormData数据必须使用post请求方式发送
var xhr = new XMLHttpRequest(); xhr.open('post','端口'); -直接将FormData对象放入到send()参数中即可,也不需要设置requestHeader xhr.send(fd);
|
html结构:
1 2 3 4 5 6 7 8 9 10 11 12
| <form id="myForm"> 用户名: <input type="text" name="username"> <br> 密码: <input type="password" name="psw"> <br> 性别: <input type="password" name="gender"> <br> 学校: <input type="password" name="school"> <br> <!-- 为了不产生表单提交效果,将按钮修改为普通按钮即可 --> <button id="btn" type="button">提交</button> </form>
|
js部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var myForm = document.qureySelector("#myForm"); 1进行按钮操作 document.getElementById('btn').onclick = function () { 2通过FormData对象获取表单所有数据 -给FormData传入参数,参数为form标签/DON对象 var fd = new FormData(mtForm); 注① 希望在表单元素的基础上,再格外上传一些数据,也可以使用append() fd.append('girlFriend','rose'); -delete()删除某天数据 fd.delete('***') 3通过ajax发送 var xhr = new XMLHttpRequest(); xhr.open('post', '接口'); xhr.send(fd);
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <form id="myForm"> <input type="text" name="username"> <input type="password" name="pws"> <textarea name="txt"></textarea>
<input type="file" name="avatar">
<button type="button" id="btn">按钮</button> </form> <img src="" alt="" id="pic"> <script> var btn = document.getElementById('btn'); var myForm = document.getElementById('myForm'); var pic = document.getElementById('pic');
btn.onclick = function () { var fd = new FormData(myForm);
var xhr = new XMLHttpRequest(); xhr.open('post', '接口'); xhr.send(fd);
xhr.onload = function () { if (xhr.status === 200) { var res = JSON.parse(xhr.responseText); pic.src = '接口' + res.url; } } }; </script>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <input type="file" id="ipt"> <button id="btn">提交</button>
<img src="" alt="" id="pic">
<script> var btn = document.getElementById('btn'); var ipt = document.getElementById('ipt'); var pic = document.getElementById('pic');
btn.onclick = function () { var fd = new FormData(); fd.append('fileUpload', ipt.files[0]);
var xhr = new XMLHttpRequest(); xhr.open('post', '接口'); xhr.send(fd);
xhr.onload = function () { if (xhr.status === 200) { pic.src = '接口' + JSON.parse(xhr.responseText).url; } } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <input type="file" id="ipt"> <button id="btn">提交</button> <img src="" alt="" id="pic">
<script src="./lib/jquery.js"></script> <script> $('#btn').on('click', function () { var files = $('#ipt')[0].files; console.log(files);
if (files.length === 0) { return; } var fd = new FormData(); fd.append('uploads', files[0]);
$.ajax({ type: 'post', url: '接口', data: fd, contentType: false, processData: false, success: function (res) { if (res.status === 200) { $('#pic').prop('src', '接口' + res.url) } } }); }); </script>
|