yii中的多个ajax请求

时间:2012-10-25 11:46:03

标签: yii yii-extensions

我的ajax链接在通过ajax在另一个视图中渲染后无法正常工作。我使用委托函数与ajax来防止它。在第一个视图中它运行良好,但在第二页中它发送多个请求进行一些点击。

这是我的代码:

$i=0;
foreach($contents as $conts){

   echo CHtml::ajaxLink(conts->name, 
       array('frontend/dataView','id'=> $conts->content_id,'cat_id'=>$cat->parent_id ), 
       array('update'=>'#level3rd','beforeSend'=>'function(){$(\'body\').undelegate(\'#cont'.$i.'\', \'click\');}',),
       array('id'=>'cont'.$i,'onclick'=>"makeContactive(this.id);"));
$i++;
}

3 个答案:

答案 0 :(得分:0)

您可能正在以这种方式呈现视图:

$this->renderPartial($view, $params);

试试这个:

$this->renderPartial($view, $params, false, true);

答案 1 :(得分:0)

我不确定是这种情况,但是...在页面加载后,有些东西与jquery相关联。

例如我选择使用。我有一个函数将所选下拉列表绑定到具有特定类的所有下拉列表。现在,如果我使用Ajax带来代码,那么这些下拉列表不会被选中,因为绑定它们的函数在开始时运行了1次。如果我想让下拉列表再次使用,那么我需要重新运行所选择的函数,以便在我进行ajax调用后再次选择。

你确定你的ajax链接也不是这样吗?

答案 2 :(得分:0)

onclick事件不适用于动态加载的内容。

在旧的jQuery中,您将点击与.live('click')绑定(在1.7之前) 从jQuery 1.7开始,你可以使用.on('click')。

虽然你应该确定你不会像我那样犯同样的错误。

$('#myAnchor').on('click', myclickFunction)

这适用于页面加载,但不适用于动态内容。 正确的做法是。

$('#parentElement').on('click', '#myAnchor', 'customEvenName', myclickFunction)

这里的父元素应该是一个不动态加载的元素

所有这些的实际好处是,你可以把你的.on('click')事件放在任何地方,通常是你所包含的js脚本中的某个地方,这样所有事件只会加载一次。