javascript - 终止JS请求的方法有哪些?
问题描述
面试时遇到类似问题,大意就是,加载页面时,会用script标签加载一些js文件资源,这些资源如果长时间没有请求回来,怎么手动终止请求?
我知道Ajax请求有个abort方法,不知道面试官是不是想问这个,以及还有什么别的请求方式的终止方法吗?
问题解答
回答1:谢邀。像 @小溪流 说的一样,是考察timeout。
大致实现思路这样:
var sequence = [’foo’, ’bar’, ’baz’, ’base’, ’ball’, ’hello’, ’world’, ’100k more’], start = Date.now();setTimeout(function _worker() { do { var element = sequence.shift(); // do something with element } while( sequence.length && (Date.now() - start < 100) ); if( sequence.length )setTimeout(_worker, 25);}, 25);
以上例子,25毫秒间隔执行队列加载,加载时间在100ms内。
回答2:考察的应该是加载资源的timeout
回答3:<script>的加载总是同步(阻塞性)的,也不能用DOM操作去影响。题主需要的是独立于页面加载与渲染的异步JS加载。工具有很多,这里举一个RequireJS的例子:
HTML页面:
<!DOCTYPE html><html><head><meta charset='utf-8' /><title>Test Page</title><script src='https://cdn.staticfile.org/require.js/2.1.15/require.min.js' data-main='test1'></script></head><body></body></html>
保存为test1.js:
require.config({ paths: {’jquery’: ’//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery’,’underscore’: ’//cdn.bootcss.com/underscore.js/1.7.0/underscore’ },waitSeconds: 20});require([’jquery’], function (module) { console.log('jQuery ' + $.fn.jquery + ' successfully loaded. ');}, function (err) { console.log('SHIT happened while loading jQuery! ');});require([’underscore’], function (module) { console.log(_.last([1, 2, 3, 'Underscore.js successfully loaded. ']));}, function (err) { console.log('SHIT happened while loading Underscore.js! ');});
相关文章:
1. docker start -a dockername 老是卡住,什么情况?2. mysql - mybatis select语句问题3. python运行后没有任何反馈要怎么排查4. java内存模型的happens-before语义顺序问题5. java - 配置tomcat免安装版,无法启动 返回错误码46. 安装sublime text 3 控制台的时候出现这个报错怎么办?7. android - 安卓实现类似QQ刚换聊天背景的功能8. 现在大家是用Mysql还是mariaDb?9. javascript - QQ自带浏览器中,点击返回,就刷新页面,关闭按钮不出现,有没有人知道是怎么回事???10. 鼠标过导航标签时,无效果,请问如何查找问题
