Yii 框架中的流程输出


Process output in Yii Framework

我有一个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");
                        }',
        )
    );

在控制器中的操作中,我使用红色部分,如下所示,

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

由于我将进程输出设置为 true,因此 ajax 提交按钮工作正常。但它一直在执行(对于我点击的次数)。我希望它在单击提交按钮时仅执行一次。如果有人能帮我解决这个问题,那就太好了。我一整天都在努力解决这个问题。

好的,

我解决了解决方案。正在发生的事情是,ajax 请求根据 ID 触发。每次通过 ajax 重新加载div 时,都会加载一个新的委托/事件,指向他之前的同一个 ID。因此,当您实际单击按钮时,两个代表都将完成他们的工作,因为两者都与单击的按钮匹配。

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

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

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

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

:布尔值,事件处理程序是应附加 live/delegate 还是直接样式。如果未设置,将使用实时事件。将此提供给提交按钮解决了它。

最好为 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代码中的某个错误。

在 jQuery 的帮助下,你可以定义以下代码来"完成"函数:

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

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

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

解决方案 2:将 CHtml::ajaxButton 放入

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

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