Yii框架中的流程输出

时间:2012-08-08 09:07:02

标签: php ajax yii

我有一个如下的ajax提交按钮,

    echo CHtml::ajaxSubmitButton(
        '>', $this->createUrl('/shop/category/nextCategory&id=16&store=true&gift_store='.$_GET['gift_store'].'&startValue='.$start_value.'&endValue='.$endValue), array(
        'type'=>'GET',
        'update'=>'#test',
        'beforeSend' => 'function(){
                        alert("beforeSend");
                        }',
        'complete' =>    'function(){
                            alert("complete");
                        }',
        )
    );

在我在控制器中的动作中,我使用reder partial如下,

$this->renderPartial('view',array('model'=>$this->loadModel()),false,true);

因为我已将processOutput设置为true,所以ajax提交按钮工作正常。但它继续执行(我点击的次数)。我希望它只在单击提交按钮时执行一次。 如果有人能帮我解决这个问题会很棒。我一直在努力解决这个问题。

3 个答案:

答案 0 :(得分:4)

好吧,我解决了这个问题。发生的事情是, 根据ID触发ajax请求。每次通过ajax重新加载div时,将加载一个新的委托/事件,指向他前面的那个ID。所以当你真正点击按钮时,两个代表都会完成他们的工作,因为两者都匹配点击的按钮。

这个问题有两个解决方案。一个是每次生成按钮时都有一个唯一的id,如下所示,

array('id' => 'next-category-'.uniqid());

另一种方式,这就是我解决它的方式,

array("id"=>"next-category", "live"=>false);

live:boolean,是否应该使用live / delegate或direct style附加事件处理程序。如果没有设置,将使用liveEvents。将其提交给提交按钮解决了它。

答案 1 :(得分:1)

在jQuery的帮助下,您可以定义以下代码来“完成”功能:

function() {
    $('input[type=submit]").attr("disabled", "disabled");
}

因此,如果我理解正确的话,成功完成按钮将被禁用以重新推送。

不要忘记将css选择器输入[type = submit]修改为你的按钮的CSS选择器。

解决方案2 :将您的CHtml :: ajaxButton变为

if (!Yii::app()->request->isAjaxRequest) {

}

然后当您通过ajax加载内容时,您的按钮将不会显示在页面上

答案 2 :(得分:1)

如果为ajax请求创建normalizeUrl,那就更好了。

echo CHtml::ajaxSubmitButton(
            '>', CHtml::normalizeUrl(array('/shop/category/nextCategory',array('store'=>1,'gift_store'=>1,'startValue'=>1,'endValue'=>1))), array(
            'type'=>'GET',
            'update'=>'#test',
            'beforeSend' => 'function(){
                            alert("beforeSend");
                            }',
            'complete' =>    'function(){
                                alert("complete");
                            }',
            )
        );

这段代码很完美,我查了一下。似乎他们在你的js代码中某处可能有些错误。