Yii2 отправьте данные ajax дважды в мою таблицу - PullRequest
0 голосов
/ 25 июня 2018

в Yii2 Advanced Моя форма вставляется дважды в таблицу, если я дважды нажимаю кнопку «Отправить», моя форма дважды вставляет данные в таблицу, как будто я дважды нажимал кнопку «Отправить»;Я использую Ajax для отправки моей формы;моя форма в поле зрения

<script type="text/javascript">
    $(document).ready(function (e) {
        $("#upload-gallery").on('submit',(function(e) {
            $form = $(this);
            e.preventDefault();
            $.ajax({
                url: $form.attr('action'),
                type: "POST",
                data:  new FormData(this),
                contentType: false,
                cache: false,
                processData:false,
                success: function(data)
                {
                    document.getElementById("upload-gallery").reset();
                    $.pjax.reload({container: '#some_pjax_id', async: false});
                },
                    error: function(){}             
           });
        }));    
    });
</script>

<div class="post-gallery-form">

    <?php $form = ActiveForm::begin(['id' => 'upload-gallery', 'options' => ['enctype' => 'multipart/form-data']]) ?>

    <?= $form->field($model_PstGlr, 'PGalleryFile[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>

    <?= $form->field($model_PstGlr, 'post_text')->textarea(['rows' => 2]) ?>

    <?= $form->field($model_PstGlr, 'permission_id')->dropdownList($model_Permission->PermissionOn()) ?>

    <div class="form-group">
        <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

и мой контроллер

public function actionView($chn)
{
    $model_Permission = new Permission;

    $model_PstGlr = new PostGallery;    $acc_PstGlr = new AxPostGallery;

    if ($model_PstGlr->load(Yii::$app->request->post()) )
    {
        $acc_PstGlr->CreateGallery($model_PstGlr, $chn);
    }

    return $this->render('view', [
        'model' => $this->findModel($chn),
        'model_Permission' => $model_Permission,
        'model_PstGlr' => $model_PstGlr,

    ]);
}

Функция загрузки галереи предназначена для загрузки изображений на мое содержимое

-

public function CreateGallery ($MPGALLERY, $CHNID)
    {
        $PSTID = Yii::$app->params['PSTID'];
        $USRID = Yii::$app->user->id;

        $MPGALLERY->post_id = $PSTID;
        $MPGALLERY->user_id = $USRID;
        $MPGALLERY->channel_id = $CHNID;

        $ly_lgIMGFolder = 'upload/gal/'. $CHNID . '/' . $PSTID . '/' .date('YzHis');

        $GLRID = Yii::$app->params['GLRID'];

        $MPGALLERY->PGalleryFile = UploadedFile::getInstances($MPGALLERY, 'PGalleryFile');

        if( $MPGALLERY->save() )
        {
            mkdir($ly_lgIMGFolder, 0777, true);

            foreach ($MPGALLERY->PGalleryFile as $GImage)
            {
                $MGALLERY = new Gallery;

                $MGALLERY->post_id = $PSTID;

                $GImage->saveAs($ly_lgIMGFolder ."/". $GLRID . '.' . $GImage->extension);

                $MGALLERY->gallery_lgimage = $ly_lgIMGFolder ."/". $GLRID . '.' . $GImage->extension;

                $MGALLERY->save(false);
            }
        }
    }

1 Ответ

0 голосов
/ 26 июня 2018

Очевидно, что в вашем коде может потребоваться внести некоторые изменения.Например, создайте следующую функцию в вашем контроллере и удалите код из вашего представления.

public function actionSave(){
//This part is removed from the actionView, so that the request only saves and does nothing else; 
//You can return it back if you test and see that it works
$model_PstGlr = new PostGallery;    $acc_PstGlr = new AxPostGallery;
   if ($model_PstGlr->load(Yii::$app->request->post()) )
   {
    $acc_PstGlr->CreateGallery($model_PstGlr, $chn);
   }
}

Затем в представлении измените инициализацию вашей формы следующим образом. Причина добавления косой черты forwad состоит в предотвращении apacheот отправки запроса на новый URL-адрес, который заканчивается на '/';

<?php $form = ActiveForm::begin(['action'=> 'id' => 'upload-gallery', 'options' => ['enctype' => 'multipart/form-data']]) ?>

Надеюсь, что этот теперь поможет;

...