使用Yii';不自动加载Jquery的Ajax验证

使用Yii';不自动加载Jquery的Ajax验证,yii,Yii,我想用的是 在启用AjaxValidation之前,我的布局视图文件如下所示: <html lang="tr-TR" dir="ltr"> <head> <script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery.js"></script> </head> 然后在我的控制器上取消注释 $this->performAjaxValida

我想用的是

在启用AjaxValidation之前,我的布局视图文件如下所示:

<html lang="tr-TR" dir="ltr">
<head>
<script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery.js"></script>
</head>
然后在我的控制器上取消注释

$this->performAjaxValidation($model);
但是我得到了
$(…)。yiiactiveform不是一个函数
错误。当我检查页面的源代码时:

如您所见,还包含了一个jquery库。所以第页上有2个jquery文件。因为这个,我犯了一个错误。接下来,我将这样的内容用于禁用jquery

Yii::app()->clientscript->scriptMap['jquery.js'] = false;
现在jquery只加载一次。但这一结果是:

<html lang="tr-TR" dir="ltr">
<head>
<script type="text/javascript" src="/istanbulcityhotels/assets/cb2686c8/jquery.yiiactiveform.js"></script>
<script src="/istanbulcityhotels/js/jquery.js"></script>
</head>

jquery.yiiactiveform.jsjquery.js之前调用。它应该在jquery.js之后调用。 有点困惑。我该怎么办

附加的 是的,我读这个问题是因为标题非常相似,但问题是不一样的


谢谢。

您不应该从布局中手动包含jQuery。不要这样做,而是从
控制器
基类中包含它:

public function init() {
    Yii::app()->clientScript->registerCoreScript('jquery');
}

不要忘记从具体的控制器中调用
parent::init()

只需将自己的jquery放在标记标题上, 就这样,

<script src="/istanbulcityhotels/js/jquery.js"></script>
<title>your title</title>

你的头衔

似乎CActiveForm使用
CClientScript::POS_HEAD
常量将脚本插入
标题
标记之前。因此,一个解决方法是添加此代码

<?php
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
    'jquery.js'=>false
);?>

这样,jquery.yiiactiveform.js将在jquery之后立即加载。

对于具体的控制器,您是什么意思?对不起,英语不好。你能举个例子吗?@Eray:从
Controller
派生的类,例如
UserController
。他们的
init
函数(如果您正在使用)需要调用
parent::init()
——这是标准的PHP内容,但我提到它是因为它很重要。好了,现在我明白了。我刚刚修改了受保护的/components/Controller.php文件。然后在我的所有控制器上调用
parent::init()
。工作顺利。但是这样做并向所有控制器添加
parent::init()
,还有很长的路要走。是否可以使用我的配置文件执行此操作?例如,我可以在配置文件中使用
clientScript
组件吗?所以我可以在我的配置文件中注册jquery,它将包含在每一页中。@Eray:不,那是不可能的。但是考虑到现在你有一个现成的计划来配置类似的东西:到处添加另一个脚本现在是<代码>控制器< /代码>中的一个附加行。在一个具体的控制器中,或者仅仅为了一个特定的操作,重写它现在也非常容易(以前是不可能的)
<?php
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
    'jquery.js'=>false
);?>
<script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery.js"></script>