Отключение оповещений при нажатии кнопки
Когда я нажимаю кнопку, оповещения не выполняются. Что я делаю не так? Может быть, мне нужно включить некоторые файлы 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 answers
Не уверен, что это ваша проблема, но функция 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::ajaxSubmit.
Попробуйте это
this->renderPartial('//blocks/user_info','', false, true);
В моем коде это работает, попробуйте это
<?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);
}
}',
));
?>
Работает ли beforeSend? Что, если вы попробуете "успех" вместо "полный"?
У меня тоже есть эта проблема (ошибка?). Попробуйте изменить "Перед отправкой" и другие обратные вызовы в этом представлении:
'beforeSend':'js:alert("complete");'
Без "функции(){}" и с "js".
P.S. Извините, мой английский плохой (
Это простой пример кнопки отправки Yii Ajax:
<?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/
Кнопка отправки 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")
);
В действии контроллера:
$return = array();
$return['status'] = '1';
$return['msg'] = 'Record Updated Successfully';
echo CJSON::encode($return);
Yii::app()->end();
Измените возвращаемый массив в соответствии с требованиями.
Вы должны установить четвертый параметр функции RenderPartial в значение true, чтобы Yii включал необходимые файлы JS для правильной работы представления.
$this->renderPartial('_form',array('model'=>$model), false, true);
В функции контроллера вам нужно отправить еще 3 параметра (всего 4 параметра)
Ваша функция будет такой
public function actionLogin()
{
this->renderPartial('//blocks/user_info','',false,true);
}