以下代码段:
$.ajax({
url: 'actions.xml',
cache: false,
dataType: 'xml'
}).done(function(data) {
$(data).find('script').each(function() {
deferreds.push($.ajax({
url: $(this).text(),
dataType: 'script'
}));
});
$.when.apply($, deferreds).then(function() {
$('.preloader').fadeOut();
...
});
});
在浏览器上,此代码执行没有问题。预加载器淡出,一切都很好。在通过cordova的移动项目中,我遇到了问题。 $.when.apply
部分似乎没有执行。预加载器永远不会淡出,因此应用程序无法正常工作。有谁知道,为什么会这样?
deferreds数组具有与浏览器中相同的值。我通过alert(JSON.stringify(deferreds));
我通过设置一些警报来解决这个问题,并且可以归结为这个特定的问题。在这一点上肯定会崩溃。
我今天必须完成这件事,我尝试了不同的事情,例如设置超时,将其他功能等等,以解决这个问题,但似乎没有任何工作,也许这方面的专家在两秒内就有了解决方案。
答案 0 :(得分:1)
您可以避免同时使用这种逻辑逐个发送过多请求:
$.ajax({
url: 'actions.xml',
cache: false,
dataType: 'xml'
}).done(function (data) {
var queue = $.Deferred().resolve();
$(data).find('script').map(function () {
return $(this).text()
}).get().forEach(function (url) {
queue = queue.then(function () {
return $.ajax({
url: url,
dataType: 'script'
}).promise();
})
});
});
请注意,也许您的问题仅仅是因为IOS模拟器,您应该在IOS设备上测试您的原始代码(如果尚未完成),并查看是否仍存在同样的问题。