我有以下功能:
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中显示,但在其他浏览器中可以正常工作。
有人对这里可能发生的事情有所了解吗?
答案 0 :(得分:0)
想出来。这是因为我的自调函数表达式位于之前 getLicenseCount()
的函数定义。看起来Chrome的JS引擎很聪明,可以在出现故障时解决问题,但Firefox不是。改变两个块的顺序使它工作。
当我改变我将函数从function getLicenseCount()
定义为var getLicenseCount = function()
的方式时,我才意外地发现了这一点。 Chrome然后抛出一个错误,说GetLicenseCount不是一个函数。虽然Firefox仍然很安静!