You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新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,提问作者Игорь Быстревский

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:15:13