更新Yii GridView时出现'Uncaught TypeError: Cannot read property 'ajaxType' of undefined'错误求助
解决Uncaught TypeError: Cannot read property 'ajaxType' of undefined错误
我之前也碰到过一模一样的问题!这个错误的根源很清晰:当你在$(document).ready里调用$.fn.yiiGridView.update('new-orders')时,YiiBooster的TbGridView对应的JS组件还没完成初始化。而控制台手动调用正常,是因为那时候页面所有资源、组件初始化流程都走完了;但第一次提前调用触发错误后,会把组件的状态搞异常,后续再调用自然也会失败。
下面给你几个靠谱的解决方案:
方案1:加个短暂延迟,给组件初始化留时间
最简单的办法就是给更新操作加个小延迟,确保GridView组件初始化完成后再执行:
$(document).ready(function () { // 提个小细节:标准写法是$(document)而非$('document'),后者虽然能运行但不够规范 setTimeout(function() { $.fn.yiiGridView.update('new-orders'); }, 150); // 延迟时间可以根据你页面的加载速度调整,一般100-300ms就足够了 });
方案2:监听GridView初始化完成事件(更精准)
Yii的GridView组件在初始化完成时会触发特定事件,你可以监听这个事件来执行更新,这样能完美把握时机,不用靠猜延迟时间:
$(document).on('gridView.init', '#new-orders', function() { $.fn.yiiGridView.update('new-orders'); });
如果上面的事件不生效,也可以试试监听GridView容器的ajaxComplete事件,确保第一次Ajax加载完成后再执行更新(要是只需要执行一次,记得解绑事件):
$('#new-orders').on('ajaxComplete', function() { $.fn.yiiGridView.update('new-orders'); // 只执行一次的话,解绑事件避免重复触发 $(this).off('ajaxComplete'); });
方案3:检查JS加载顺序
另外要确认你的自定义JS代码是在YiiGridView的核心JS文件(比如jquery.yiigridview.js)之后加载的。如果你的代码加载在前,哪怕放在ready里,也可能因为GridView的JS还没解析完成而报错。
对了,你的TbGridView配置没问题——id设成了new-orders,ajaxUrl也配置正确,这部分不用改。
内容的提问来源于stack exchange,提问作者Игорь Быстревский
相关产品推荐
相关产品推荐

