Ajax done()和always()永远不会在Firefox中激活

时间:2016-03-13 23:04:24

标签: jquery ajax

我有以下功能:

function getLicenseCount() {        
    $.ajax({
        type: "GET",
        url: LFLicenseCheckerURI,
        dataType: "text"
    }).done(function(data) {
        updateRemainingLicenses(data);
    }).fail(function(data) {
        alert("Unable to get remaining license count.");
    }).always(function(data) {
        $loadingScreen.hide();
    });
}

服务器返回文本格式的简单数字,这就是DataType设置为文本的原因。

我在页面上的一个自调用函数表达式中调用了这个函数:

(function() {   

    console.log("before");
    getLicenseCount();
    console.log("after");

    //other stuff

}());

这在Chrome,IE和Edge中运行良好。但是,在Firefox中,它会卡在某处,console.log("after")永远不会触发。没有报告错误。更奇怪的是,always承诺功能也不会发射!如果我在其中添加了另一个console.log,它就不会在Firefox中显示,但在其他浏览器中可以正常工作。

有人对这里可能发生的事情有所了解吗?

1 个答案:

答案 0 :(得分:0)

想出来。这是因为我的自调函数表达式位于之前 getLicenseCount()的函数定义。看起来Chrome的JS引擎很聪明,可以在出现故障时解决问题,但Firefox不是。改变两个块的顺序使它工作。

当我改变我将函数从function getLicenseCount()定义为var getLicenseCount = function()的方式时,我才意外地发现了这一点。 Chrome然后抛出一个错误,说GetLicenseCount不是一个函数。虽然Firefox仍然很安静!