ajax
Ajax
全称是Asynchronous JavaScript and XML
,指的是通过Javascript脚本发起HTTP通信;
- 它可以使用原生的
XMLHttpRequest对象
向服务器发出HTTP请求,这个请求可以是同步或异步的(一般是异步),建立连接后可以得到服务器的数据,我们就可以利用得到的数据通过JS来更新部分页面而无需对整个页面进行刷新。
前后端开发联调需要注意哪些事情?后端接口完成前如何 mock 数据?
- 前后端联调需要注意:①确定接口信息;有哪些接口,哪些参数,以什么样的请求等,一般要确定详细的接口文档。②确定要填充的数据,哪里填充图片,哪里填充文本信息等。
- 在后端接口完成前,我们可以根据接口文档,使用假数据来验证我们制作的页面响应和接口是否正常,可以使用Mock.js,它能拦截ajax请求并根据请求中的内容来随机生成符合你要求的假数据,模拟后端环境让你完成对页面和接口的测试。
点击按钮,使用 ajax 获取数据,如何在数据到来之前防止重复点击?
- 自己的想法:依目前所学,只有js能实现;第一反应是点击后我把事件移除,你随便点,等加载完成后我在处理函数中再给它绑事件;或者我再给按钮绑个事件,点击后把自己的class给改掉让ajax不能正常触发,不过改class可能会有改变样式的风险,写样式时可以预先加个比如interrupt的类。
- 网上搜索了一下:自己封装加个比对-如果ajax请求一致的话就不进行提交、提交后把
button disable
掉、如果点完一个又去点了另外一个的话就abort
之前的请求、加个setTimeout+clearTimeOut
避免恶意快速点击等。
用js封装了一个 ajax 函数
function ajax(opts){
var request = new XMLHttpRequest();
var str = '';
for(i in opts.data){
str += i+'='+opts.data[i]+'&';
}
str = str.substr(0, str.length-1);
if(opts.type.toLowerCase() === 'get'){
request.open('GET', opts.url+'?'+str, true);
request.send();
}
if(opt.type.toLowerCase() === 'post'){
resuest.open('POST', opt.url, true);
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send(str);
}
request.onreadystatechange=function(){
if(request.readyState==4 && request.status==200){
var responsetext=JSON.parse(request.responseText);
opts.success(responsetext);
}
if(request.status!==200){
opts.error();
}
}
}
document.querySelector('#btn').addEventListener('click', function(){
ajax({
url: 'getData.php', //接口地址
type: 'get', // 类型, post 或者 get,
data: {
username: 'xiaoming',
password: 'abcd1234'
},
success: function(ret){
console.log(ret); // {status: 0}
},
error: function(){
console.log('出错了')
}
})
});