Почему записи удаляются в обоих случаях?

Краткий

Всем привет! Я новичок в javascript. Я использую Laravel + DataTables в своем проекте. Теперь я использую sweetalert2 вместо стандартного подтверждения javascript.

Код

Здесь я вызываю свой метод javascript:

<a href="#" onclick="deleteData('.$contact->id.')" class="btn btn-danger btn-xs">
   <i class="fa fa-trash"></i>
   <span>Delete</span>
</a>

Вот моя функция javascript:

function deleteData(id){
  var csrf_token = $('meta[name="csrf-token"]').attr('content');
  swal({
    title: 'Are you sure?',
    text: "You won't be able to revert this!",
    type: 'warning',
    showCancelButton: true,
    cancelButtonColor: '#d33',
    confirmButtonColor: '#3085d6',
    confirmButtonText: 'Yes, delete it!'
  }).then(function(){
    $.ajax({
      url: "{{url('contact')}}" + '/' + id,
      type: "POST",
      data: {'_method' : 'DELETE', '_token' : csrf_token},
      success: function(data){
        contacts.ajax.reload();
        swal({
          title: 'Success!',
          text: 'Data has been deleted!',
          type: 'success',
          timer: '1500'
        })
      },
      error: function(){
        swal({
          title: 'Oops...',
          text: 'Something went wrong!',
          type: 'error',
          timer: '1500'
        })
      }
    });
  });
}

Когда я нажму, чтобы удалить кнопку:

введите здесь описание изображения

Отображение модели подтверждения:

введите здесь описание изображения

Затем я нажму кнопку отменить. Но после нажатия кнопки отмены данные удаляются из базы данных. И почему записи удаляются в обоих случаях?


person Andreas Hunter    schedule 06.02.2018    source источник
comment
В функции then после swal вам нужно проверить, было ли нажато «ОК» или «Отмена», и удалить материал только в том случае, если было нажато «ОК». Посмотрите примеры в разделе «использование промисов» здесь   -  person James    schedule 06.02.2018
comment
Я видел документацию @James, но я не понимаю, что здесь проверять на нажатие. Как проверить, какая кнопка была нажата? В javascript есть функция button = confirm('Confirm message!') и я могу использовать ее if(button == true), но в sweetalerts я не могу использовать кнопку проверки нажатия.   -  person Andreas Hunter    schedule 06.02.2018
comment
То, как вы используете, then неверно, в основном это говорит о том, что всякий раз, когда отображается или заканчивается показ sweetAlert, затем удаляются данные с сервера, вы должны проверить, была ли нажата кнопка или нет.   -  person Akar    schedule 06.02.2018


Ответы (1)


Вы забыли проверить результат выполненного обещания:

swal({
  title: 'Are you sure?',
  text: "You won't be able to revert this!",
  type: 'warning',
  showCancelButton: true,
  cancelButtonColor: '#d33',
  confirmButtonColor: '#3085d6',
  confirmButtonText: 'Yes, delete it!'
}).then(function(result){
  

  if (result.value) {
    // perform the AJAX request
  }


});
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@7"></script>

Связанный пример из официальной документации: https://sweetalert2.github.io/#dismiss-handle

person Limon Monte    schedule 06.02.2018
comment
Спасибо, я исправил свой код javascript @Limon Monte - person Andreas Hunter; 06.02.2018