jQuery何时,然后在浏览器中执行但不在移动设备上执行?

时间:2015-10-22 08:21:05

标签: javascript jquery cordova

以下代码段:

$.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));

对此进行了测试

我通过设置一些警报来解决这个问题,并且可以归结为这个特定的问题。在这一点上肯定会崩溃。

我今天必须完成这件事,我尝试了不同的事情,例如设置超时,将其他功能等等,以解决这个问题,但似乎没有任何工作,也许这方面的专家在两秒内就有了解决方案。

1 个答案:

答案 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设备上测试您的原始代码(如果尚未完成),并查看是否仍存在同样的问题。