如何在Yii中禁用Ajax上的jQuery自动加载?

我正在使用以下代码生成ajax请求:

echo CHtml::dropDownList('teamA', '', EnumController::getTeamOption(), array( 'empty' => '(Team / Single)', 'ajax' => array( 'type'=>'POST', 'url'=> $url, 'update'=>"#resultA", //'data'=>"js:$('#teamA').hide().fadeIn()" ) ) ); 

在我的主要布局中,我有以下内容:

 clientScript->scriptMap=array('jquery.js'=>false);?> clientScript->scriptMap=array('jquery.min.js'=>false);?>   

Yii正在从资产中加载jQuery副本,然后 – 另一个副本,直接从Google加载。 我只想使用Google副本并强制Yii不从资源加载自己的副本。 我怎样才能做到这一点?

在Yii中,你永远不应该在主布局中硬编码任何javascript信息。

Yii可以确定是否已包含客户端脚本(javascript),但对于核心脚本(如jquery或jqueryui),您必须在配置文件中修改这些包。

打开main.php配置文件,在CClientScript组件中添加所需的所有js包(你应该在components添加它),如下所示:

 'clientScript'=>array( 'packages'=>array( 'jquery'=>array( 'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1.8/', 'js'=>array('jquery.min.js'), 'coreScriptPosition'=>CClientScript::POS_HEAD ), 'jquery.ui'=>array( 'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jqueryui/1.8/', 'js'=>array('jquery-ui.min.js'), 'depends'=>array('jquery'), 'coreScriptPosition'=>CClientScript::POS_BEGIN ) ), ), 

然后,每次需要jquery时,只需在代码之前添加:

 $cs = Yii::app()->getClientScript(); $cs->registerCoreScript('jquery'); 

然后Yii将只包含一次jquery(或任何其他脚本),即使你在代码中多次调用它也是如此。

按照Yii Special Topics Performance的说明 ,我做了一个快速测试,这个工作:

在主要布局的顶部:

 clientScript; $cs->scriptMap=array( 'jquery.js'=>false, 'jquery.ui.js' => false, );?> 

在主布局的部分:

   

要么

   

我实际上会使用CGoogleApi助手,但jsapi显然无法加载高于我示例中的jquery版本! 我想这对谷歌的更新很慢,因为它在普通文件中也不起作用。

或者js文件可能仍在缓存中?

这会奏效

  clientScript; $cs->scriptMap=array( 'jquery.js'=>false, 'jquery.ui.js' => false, ); ?>