yii框架默认自带jquery但不自动加载:yii1需手动调用registercorescript('jquery'),yii2需在assetbundle中声明依赖yii\web\jqueryasset或视图中注册该bundle。

Yii 框架默认自带 jQuery,但不是“开箱即用”——它需要显式注册或启用,否则 $ 或 jQuery 在视图里会报 ReferenceError: $ is not defined。
Yii1 中如何正确加载 jQuery
Yii1 默认不自动注册 jQuery,即使你看到 framework/web/js/jquery.js 存在,也不代表它会被自动引入。
- 在控制器或视图中手动注册:
Yii::app()->clientScript->registerCoreScript('jquery'); - 该调用必须在
render()之前执行(比如放在action开头或init()里) - 注册后,
jQuery和$才可用;否则直接写$(...)会失败 - 避免重复注册:多次调用
registerCoreScript('jquery')不会报错,但会生成多个<script></script>标签,可能触发冲突
Yii2 中 jQuery 的加载机制变了
Yii2 使用 AssetBundle 管理前端资源,jQuery 是 yii\web\JqueryAsset 的一部分,不再靠 registerCoreScript 控制。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 默认情况下,
AppAsset(或你自定义的主 AssetBundle)若继承自yii\web\AssetBundle并未显式声明依赖,jQuery 不会自动注入 - 正确做法是在你的
AppAsset.php中添加:public $depends = ['yii\web\JqueryAsset']; - 如果只在某个视图临时用 jQuery,也可在视图顶部加:
$this->registerAssetBundle('yii\web\JqueryAsset'); - 注意:Yii2 的
JqueryAsset默认使用压缩版jquery.min.js,路径由sourcePath决定,不建议手动改basePath或硬链接 CDN
jQuery 插件在 Yii 中加载失败的常见原因
插件 JS 加载了,但调用时报 $.xxx is not a function,大概率是执行顺序或作用域问题。
- 插件脚本必须在 jQuery 之后加载:检查 HTML 源码,确认
<script src="jquery.min.js"></script>出现在插件 script 标签之前 - Yii 的
registerJs()默认插入到页面底部(POS_READY),但如果你用POS_HEAD注册 jQuery 插件,而 jQuery 本身在底部加载,就会错序 - 避免在
$(document).ready()外直接调用插件初始化代码;更稳妥的是用Yii::$app->view->registerJs()包裹,并设为View::POS_READY - 如果插件依赖特定版本(如 select2 v4 要求 jQuery ≥ 1.9),而 Yii 自带的是 1.11 或 3.x,需替换
JqueryAsset的sourcePath或自定义 AssetBundle
CSRF Token 怎么传给 jQuery Ajax 请求
Yii 默认开启 CSRF 验证,所有 POST/PUT/DELETE 请求必须带上有效 token,否则返回 400 错误。
- 在视图中先暴露 token:
<meta name="csrf-param" content="<?= Yii::$app->request->csrfParam ?>"> <meta name="csrf-token" content="<?= Yii::$app->request->csrfToken ?>"> - 然后全局配置 jQuery:
$.ajaxSetup({data: {= Yii::$app->request->csrfParam ?>: $('meta[name="csrf-token"]').attr('content')}}); - 或者每个请求单独加:
$.post('/site/update', { _csrf: yii.getCsrfToken(), ... })(需确保已加载yii.js) - 注意:
yii.getCsrfToken()是 Yii2 提供的辅助方法,仅在yii\web\YiiAsset注册后才可用
最易被忽略的一点:Yii2 的 AssetBundle 有严格的发布机制,publish() 后的路径带哈希,直接写死 /assets/xxx/jquery.js 会导致资源 404;一切 JS/CSS 引用都应走 registerAssetBundle() 或 registerJsFile()。










