ajax отправка данных Active form с файлом без ajaxSubmitButton

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Gogi
Сообщения: 103
Зарегистрирован: 2015.04.16, 09:20

ajax отправка данных Active form с файлом без ajaxSubmitButton

Сообщение Gogi »

Какие есть варианты отправлять данные формы с файлом на сервер ajax'ом не используя ajaxSubmitButton?
Вот код:

Код: Выделить всё

<?php $form = $this->beginWidget('CActiveForm', array(
                'id' => 'course-form',
                'action'=>Yii::app()->createUrl('/_teacher/_admin/coursemanage/create'),
                'htmlOptions' => array(
                    'class' => 'formatted-form',
                    'enctype' => 'multipart/form-data',
                ),
                'enableAjaxValidation' => true,
                'enableClientValidation' => false,
                'clientOptions' => array(
                    'validateOnSubmit' => true,
                    'validateOnChange' => true,
//                    'afterValidate' => 'js:function(form,data,hasError){
//                        myAjaxSendData(data,hasError,form[0].action,$(form).serialize());
//                        return false;
//                }'
                ),
            )); ?>
...
<div class="form-group">
        <?php echo $form->labelEx($model, 'course_img'); ?>
        <?php echo CHtml::activeFileField($model, 'course_img')); ?>
</div>
...
<div class="form-group">
        <?php echo CHtml::submitButton($model->isNewRecord ? Yii::t('coursemanage', '0398') : Yii::t('coursemanage', '0399'),
            array(
                'class' => 'btn btn-primary',
                'id' => 'submitButton',
            )); ?>
    </div>
<?php $this->endWidget(); ?>
В afterValidate прописал свою функцию myAjaxSendData, которая должна была исполнятся после успешной валидации, и в ней с помощью аякс запроса отправлял на сервер данные, но таким образом данные CHtml::activeFileField не передаются
Gogi
Сообщения: 103
Зарегистрирован: 2015.04.16, 09:20

Re: ajax отправка данных Active form с файлом без ajaxSubmitButton

Сообщение Gogi »

Во многих источниках встречается решение:

Код: Выделить всё

function myAjaxSendData(url) {
    var formData = new FormData($("#course-form")[0]);
    $.ajax({
        url: url,
        type: 'POST',
        data: formData,
        datatype:'json',
        success: function (data) {
            alert('good');
        },
        error: function (data) {
            alert("There may a error on uploading. Try again later")
        },
        cache: false,
        contentType: false,
        processData: false
    });

    return false;
} 
Но console.log(formData); возвращает пустой обьект
Gogi
Сообщения: 103
Зарегистрирован: 2015.04.16, 09:20

Re: ajax отправка данных Active form с файлом без ajaxSubmitButton

Сообщение Gogi »

Данное решение работает, хоть и в консоли обьект пустой
Ответить