如何处理多个并发请求的回调
1个回答
推荐于2016-04-10 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
我曾经为Mozilla Developer Network 开发一个新功能,它需要加载一个基本的脚本文件的同时加载一个JSON请求。因为我们使用的是jQuery,意味着要使用 jQuery.getScript和jQuery.getJSON。我知道这两者都是异步的并返回一个Deferred(jQuery中的Promise模式实现, 参见: deffered object)对象,因此我想知道能不能在一个回调里按顺序请求它们,就像多数的JavaScript加载器那样(如curljs )。我很幸运,使用jQuery就可以用一个回调处理两个请求。
jQuery的JavaScript代码
就像我刚才提到的,我需要加载一个脚本和一个JSON文件,就像这样:
$.when(
$.getScript('/media/js/wiki-min.js?build=21eb633'),
$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/')
).then(function(a, b) {
// 或者 ".done"
// 好了,东西都加载好了,可以干活了
});
当资源文件加载完时,done或者callback就会被触发,我就知道已经请求完了。每一个请求都返回了不同的回调参数,如上面的返回参数就像这样:
// [response, state, jqxhr], [response, state, jqxhr]
["(function(c){var e=c(".from-search-navigate");if(e…;if(j){g.apply(m,l)}}}})(window,document,jQuery);", "success", Object] [Array[15], "success", Object]
如果我们希望再加载一个传统的Ajax请求,就像获取一个HTML模板,我们可以这样:
$.when(
$.getScript('/media/js/wiki-min.js?build=21eb633'),
$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/'),
$.get('/')
).then(function(a, b, c) {
console.log(a, b, c);
});
Dojo Toolkit很早以前就有类似的功能了,但是我不知道现代jQuery也可以。在一个回调中处理多个请求在请多场合需要用到,可以看出jQuery也在与时俱进。
jQuery的JavaScript代码
就像我刚才提到的,我需要加载一个脚本和一个JSON文件,就像这样:
$.when(
$.getScript('/media/js/wiki-min.js?build=21eb633'),
$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/')
).then(function(a, b) {
// 或者 ".done"
// 好了,东西都加载好了,可以干活了
});
当资源文件加载完时,done或者callback就会被触发,我就知道已经请求完了。每一个请求都返回了不同的回调参数,如上面的返回参数就像这样:
// [response, state, jqxhr], [response, state, jqxhr]
["(function(c){var e=c(".from-search-navigate");if(e…;if(j){g.apply(m,l)}}}})(window,document,jQuery);", "success", Object] [Array[15], "success", Object]
如果我们希望再加载一个传统的Ajax请求,就像获取一个HTML模板,我们可以这样:
$.when(
$.getScript('/media/js/wiki-min.js?build=21eb633'),
$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/'),
$.get('/')
).then(function(a, b, c) {
console.log(a, b, c);
});
Dojo Toolkit很早以前就有类似的功能了,但是我不知道现代jQuery也可以。在一个回调中处理多个请求在请多场合需要用到,可以看出jQuery也在与时俱进。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询