Форма через ajax не отправляется

#yii2

#yii2

Вопрос:

Мне нужен индикатор выполнения при отправке формы через ajax, но проблема в том, что если форма отправлена, индикатор выполнения не работает, и когда отображается индикатор выполнения, форма не отправляется.Я не могу понять, что происходит.Когда я скрываю (данные: {tenure_id ,срок выполнения} ), отображается индикатор выполнения, но форма не отправлена.

Форма

 <?php

use yiihelpersHtml;
use yiiwidgetsActiveForm;
use yiihelpersArrayHelper;
use appmodelsTenure;
use appmodelsSectors;

/* @var $this yiiwebView */
/* @var $model appmodelsBillGenerate */
/* @var $form yiiwidgetsActiveForm */
?> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="bill-generate-form">

    <div class="card mb-4">
        <div class="card-header">
            Bill Genrate
        </div>
        <div class="card-body">
            <?php $form = ActiveForm::begin(['id' => 'create']); ?>
            
            <?= $form->field($model, 'tenure_id')->dropDownList(
            ArrayHelper::map(tenure::find()->all(),'id', 'tenure_name'),
            ['prompt'=>'Select Tenure','id' => 'tenure_i'])?>
              
            <div class="form-group">
                    <label for="date">Due Date</label>
                    <input type="Date" class="form-control" name ="due-date" id="date">
                </div>
             

            <?= Html::submitButton(Yii::t('app', 'Genrate Bill'), ['class' => 'btn btn-primary','id' =>'save']) ?>
            <?php ActiveForm::end(); ?>
        </div>
    </div>
</div>

 


 <div class="form-group" id="process" style="display:none;">
        <div class="progress">
       <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" style="">
    </div>

</div>


<script>
 
     $(document).ready(function(){
      
      $('#create').on('submit', function(event){
       event.preventDefault();
        
     
        $.ajax({

         url:'<?= Yii::$app->homeurl?>bill-generate/create?tenure_id=25amp;due-date=2021-02-11',
         method:"GET",

         //data: {tenure_id ,due-date},

         beforeSend:function()
         {

          $('#save').attr('disabled', 'disabled');
          $('#process').css('display', 'block');
         },

         success:function(data)
         {

          var percentage = 0;

          var timer = setInterval(function(){
           percentage = percentage   20;
           progress_bar_process(percentage, timer);
          }, 1000);

         }
        })
       
      });

      function progress_bar_process(percentage, timer)
      {
       $('.progress-bar').css('width', percentage   '%');
       if(percentage > 100)
       {
        clearInterval(timer);
        $('#create')[0].reset();
        $('#process').css('display', 'none');
        $('.progress-bar').css('width', '0%');
        $('#save').attr('disabled', false);
        setTimeout(function(){
         $('#success_message').html('');
        }, 5000);
       }
      }

     });
</script>
 

Комментарии:

1. Возможно, отправка формы займет совсем немного времени, поэтому вы ее не увидите!

2. @EmmaGrove нет, я ждал этого, но ничего не произошло

3. Я имел в виду, что это происходит так быстро. Добавьте console.log(«Перед отправкой») в функцию beforeSend, чтобы проверить, правильно ли она работает

4. @EmmaGrove «перед отправкой» работает отлично

5. Проблема в том, что когда я комментирую данные (data: {tenure_id , срок выполнения},) отображается индикатор выполнения, но данные не представлены, но когда я откомментирую данные (data: {tenure_id, срок выполнения},), тогда данные отправляются, но панель не отображается

Ответ №1:

Используйте опцию данных ajax. Вы можете отправить объект данных на сервер с помощью data опции в ajax. Не рекомендуется передавать строку запроса в URL.

Ваш код должен быть примерно таким..

 $.ajax({
    url: "<?= Yii::$app->homeurl?>bill-generate/create",
    type: "get",
    data: { 
        tenure_id: 25, 
        due-date: 2021-02-11
    },
    beforeSend:function(){
        $('#save').attr('disabled', 'disabled');
        $('#process').css('display', 'block');
    },
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});