Задать вопрос

Как сделать валидацию файла с помощью ajax?

Здравствуйте, как сделать валидацию файла с помощью ajax? При нажатии кнопки submit переходит на страницу /audio/create и там валидация работает, но валидация должна быть через ajax
Контроллер
public function actionCreate()
        {
            $model = new Audio;
            $uid = Yii::app()->user->id;

            if (!isset($model)) throw new CHttpException(404);

            $model->song = CUploadedFile::getInstance($model, 'song');
            $model->cover = CUploadedFile::getInstance($model, 'cover');
            if (isset($_POST['ajax']) && $_POST['ajax'] === 'audio-form')
            {
                echo CActiveForm::validate($model);
                Yii::app()->end();
            }
}


Правило в модели
array('cover, song', 'required'),
array(
                    'cover',
                    'file',
                    'types' => 'jpg, gif, png,  jpeg',
                    'allowEmpty' => false
),
array(
                    'song',
                    'file',
                    'types' => 'mp3',
                    'maxSize' => 1024 * 1024 * 50,
                    'tooLarge' => 'The file was larger than 50MB. Please upload a smaller file.',
                    'allowEmpty' => false
),


Форма
<?php
                $form = $this->beginWidget('CActiveForm',array(
                    'id'=>'audio-form',
                    'action'=>CHtml::normalizeUrl(array("audio/Create")),
                    'enableAjaxValidation'=>true,
                    'enableClientValidation'=>false,
                    'clientOptions'=>array(
                        'validateOnSubmit'=>true,
                        'validateOnChange'=>false,

                    ),
                    'htmlOptions' => array('enctype'=>'multipart/form-data'),
                ));
                 echo $form->error($audio,'song');
                 echo $form->error($audio,'cover'); ?>


                <div class="left-files-input">
					<div class="song-input">
						<?php echo $form->fileField($audio, 'song',  $htmlOptions=array('id'=>'audioinput', 'accept' => 'audio/mp3')); ?>
					</div>
					<div class="cover-input">
						<?php echo $form->fileField($audio, 'cover',  $htmlOptions=array('id'=>'coverinput', 'accept' => 'image/jpeg,image/png')); ?>
                    </div>
				</div>
            <?php $this->endWidget(); ?>
  • Вопрос задан
  • 2995 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Nokyta
Надо писать костыль. Т.к. аяксом файлики не бегают (если конечно не реализовано при помощи blob и XHttpRequest2). Вам придется прикручивать специальный аплоадер который костылем реализовывает фоновую отправку файла, на сервере валидировать, и при помощи callback'ов выводить ошибки.
Ответ написан
Комментировать
@Nc_Soft
Скачайте плагин Jquery Forms, он позволяет послать файл через ajax.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы