AJAX回调中调用其他JS文件函数报未定义错误如何解决
问题解答
跨JS文件调用函数的可行性
完全可以在AJAX回调中调用其他JS文件的函数,只要满足两个前提:
- 被调用的函数所在的JS文件,早于调用逻辑所在的JS文件加载完成
- 被调用的函数处于可访问的作用域内
你已经按顺序加载了1.js和2.js,加载顺序没有问题,报错是作用域限制导致的。
报错原因
1.js中的_HideErrorBox是Calculations立即执行函数(IIFE)内部的私有函数,仅在IIFE内部可访问,既没有挂载到全局作用域,也没有暴露到Calculations对外的公共接口中,因此2.js无法访问到该函数,触发引用错误。
解决方案
方案1:将函数暴露到Calculations公共接口(推荐,符合模块化规范)
修改1.js的返回值,把_HideErrorBox加入对外暴露的属性:
var Calculations = function() { var _HideErrorBox = function() { // 若需要AJAX成功后直接隐藏错误框,补充下方逻辑 $("#errorbox").hide(); $(document).on("click", ".close", function() { $("#errorbox").hide(); }); }; return { init: function() { _HideErrorBox(); }, // 新增对外暴露的方法 HideErrorBox: _HideErrorBox }; }(); jQuery(function() { Calculations.init(); });
修改2.js中的调用逻辑:
success: function(data) { Calculations.HideErrorBox(); }
方案2:将函数挂载到全局作用域(仅适合小型项目快速修复,会污染全局命名空间)
修改1.js中的_HideErrorBox定义,挂载到window对象:
// 替换原var _HideErrorBox = function()...的定义 window._HideErrorBox = function() { $("#errorbox").hide(); $(document).on("click", ".close", function() { $("#errorbox").hide(); }); };
2.js中原有的_HideErrorBox()调用无需修改即可生效。
额外注意
你原本定义的_HideErrorBox仅完成了关闭按钮的点击事件绑定,并不会直接隐藏错误框,如果需求是AJAX请求成功后立刻隐藏错误提示,需要在函数开头补充$("#errorbox").hide();的逻辑。
内容的提问来源于stack exchange,提问作者rjcode
相关产品推荐
相关产品推荐

