在按钮点击时触发警报

时间:2012-02-08 13:08:55

标签: php ajax yii ajaxsubmit

单击按钮时,不会执行警报。我究竟做错了什么?也许我需要在标题部分包含一些js文件?

这是我的登录表单视图:

<?php echo CHtml::beginForm(); ?>

<div class="row">
<?php echo CHtml::label('username', 'username'); ?>
<?php echo CHtml::textField('username'); ?>
</div>
<div class="row">
<?php echo CHtml::label('password', 'password'); ?>
<?php echo CHtml::textField('password'); ?>
</div>
<?php
echo CHtml::ajaxButton('sign in', array('site/login'),array(
        'type'=>'POST',
        'update'=>'#mydiv',
        'beforeSend' => 'function(){
            alert("beforeSend");
        }',
        'complete' => 'function(){
            alert("complete");
            }',

));
?>
<?php echo CHtml::endForm(); ?>
<div id="mydiv" style="color:white;">...</div>

这是我在控制器中的代码:

public function actionLogin()
{
    $this->renderPartial('//blocks/user_info');
}

user_info只是回显some text

9 个答案:

答案 0 :(得分:6)

不确定这是否是您的问题,但renderPartial()与AJAX不兼容。这是一个众所周知的Yii问题:

http://www.yiiframework.com/forum/index.php/topic/24699-yii-20-ajaxrenderpartial-conflict/ http://www.yiiframework.com/forum/index.php?/topic/10427-ajax-clientscript

当我尝试通过AJAX加载表单时遇到问题,然后使用CHtml :: ajaxSubmitButton将其提交回来。

答案 1 :(得分:3)

试试这个

this->renderPartial('//blocks/user_info','', false, true);

答案 2 :(得分:3)

在我的代码中,它可以尝试这个

<?php
echo CHtml::ajaxSubmitButton('Save','your-url',array(
   'type'=>'POST',
   'dataType'=>'json',
   'success'=>'js:function(data){
       if(data.result==="success"){
          // do something on success, like redirect
       }else{
         $("#some-container").html(data.msg);
       }
   }',
));
?>

答案 3 :(得分:1)

beforeSend有效吗?如果你尝试“成功”而不是“完成”怎么办?

答案 4 :(得分:1)

我也有这个问题(bug?)。 尝试在此视图中更改'beforeSend'和其他回调:

'beforeSend':'js:alert("complete");'

没有“function(){}”和“js”。

P.S。 对不起,我的英语不好(

答案 5 :(得分:1)

这是Yii Ajax Submit按钮的简单示例:

<?php
echo CHtml::ajaxSubmitButton(
'Submit',
'your-url',
array(
   'type'=>'POST',
   'dataType'=>'json',
   'success'=>'js:function(data){
       if(data.result==="success"){
          // do something on success, like redirect
       }else{
         $("#some-container").html(data.msg);
       }
   }',
)
);
?>

http://www.codexamples.com/90/chtml-ajaxsubmitbutton/

的详细信息

答案 6 :(得分:0)

视图中的Ajax提交按钮:

echo CHtml::ajaxSubmitButton('Save', array('/controller/action/id/' .     $id), array(
                'type' => 'post',
                'dataType' => 'json',
                'update' => '#mydiv',
                'beforeSend' => 'function(){}',
                'complete' => 'function(){}',
                'success' => 'js:function(data){
                    if(data.status=="1"){
                        html = "<div class=\"alert in alert-block fade alert-success\"><a class=\"close\" data-dismiss=\"alert\">x</a>"+data.msg+"</div>";
                        $("#status-msg").html(html);

                        }else{
                        html = "<div class=\"alert in alert-block fade alert-error\"><a class=\"close\" data-dismiss=\"alert\">x</a>"+data.msg+"</div>";
                        $("#status-msg").html(html);
                        }
                    }',
                    ), array('class' => "btn btn-primary")
            );

在Controller操作中:

        $return = array();
        $return['status'] = '1';
        $return['msg'] = 'Record Updated Successfully';

        echo CJSON::encode($return);
        Yii::app()->end();

根据要求更改返回数组。

答案 7 :(得分:0)

您必须将renderPartial函数的第四个参数设置为true,以便Yii将包含所需的JS文件,以便正确处理视图。

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

答案 8 :(得分:0)

在控制器功能中,您需要再发送3个参数(共4个参数)

你的功能将是这样的

public function actionLogin()
{
  this->renderPartial('//blocks/user_info','',false,true);
}