Отправка формы Javascript не отправляется должным образом

У меня есть эта очень простая форма с использованием Sweet Alert, и по какой-то причине я не могу заставить ее работать. Когда я нажимаю на ссылку, он запускает предупреждение, а когда предупреждение подтверждается, он перезагружает страницу, потому что он отправляет форму.

Но почему-то, когда $_POST['delete_alert'] не определено.

Мой код для запуска предупреждения:

<a id="sa-warning">Delete</a>

Моя форма:

<form id="form" action="index.php" method="POST">
    <button type="submit" name="delete_alert" value="delete">Delete</button>
</form>

И мой Javascript:

$('#sa-warning').click(function() {
  swal({
    title: "Are you sure?",
    text: "You will not be able to recover this alert.",
    type: "warning",
    showCancelButton: true,
    confirmButtonColor: "#DD6B55",
    confirmButtonText: "Yes, delete it!",
    closeOnConfirm: false
  }, function() {
    document.forms["form"].submit();
  });
});

Я проверяю, была ли форма отправлена ​​правильно, используя этот PHP-код, который находится на index.php:

<?php 
if(isset($_POST['delete_alert'])) { 
    echo "form is submitted correctly"; 
} else { 
    echo "something is wrong"; 
} 
?>

person Nijn    schedule 02.02.2016    source источник
comment
Я не вижу никаких входных данных, кроме submit, которые могут хранить информацию, так что это может быть объяснением, почему $_POST['delete_alert'] undefined   -  person JTC    schedule 03.02.2016
comment
@JTC сама кнопка должна представить пару имя = значение, если она указана в HTML.   -  person Boldewyn    schedule 03.02.2016
comment
Должно document.forms["form"].submit(); быть $('#form').submit()? Я думаю, что document.forms ожидает индекс, а не идентификатор или имя.   -  person twernt    schedule 03.02.2016
comment
@Nijn действительно ли у <a id="sa-warning"> нет атрибута href?   -  person Boldewyn    schedule 03.02.2016
comment
У него нет атрибута href, но даже если я добавлю href = #, он все равно не работает.   -  person Nijn    schedule 03.02.2016
comment
Если у него есть атрибут href, вы инициируете GET запрос, потому что отправляется не форма, а <a id="sa-warning">. Добавьте return false; (быстро и грязно) в обработчик click.   -  person Boldewyn    schedule 03.02.2016
comment
Добавление href и изменение POST на GET тоже не работает.   -  person Nijn    schedule 03.02.2016
comment
Кнопка отправки включается в POST данные только тогда, когда вы отправляете форму, щелкнув эту кнопку, а не при отправке с помощью Javascript (как он должен знать, какие кнопки отправки следует отправлять?).   -  person Barmar    schedule 03.02.2016
comment
Пфф, я думал, что уже проверил ... Удаление кнопки отправки и добавление простого ввода. Это работает. Большое спасибо!   -  person Nijn    schedule 03.02.2016


Ответы (3)


Думаю проблема в document.forms["form"].submit();

HTML-формы отправляют отправку name=value только при нажатии кнопки. В данном случае это не так.

Поэтому я думаю, вам следует использовать click вместо submit, но в вашем случае это не сработает, потому что щелчок будет улавливаться вашей функцией javascript.

Вот почему лучше всего использовать input

person JTC    schedule 02.02.2016

возможно, это работа: http://rachmanzz.github.io/AlertlightJS

$('#sa-warning').click(function(){
    alertlightJS.$swalPost({     // $swalGet for GET Method
        title : "Are you sure?",
        text  : "You will not be able to recover this alert.",
        type  : "warning",
        confirmText:"Yes, delete it!",
        cancelText:"No!"
    },{
        url : "index.php",
        input   : {
            delete_alert:'delete'
        }
    },function(isConfirm,data,swal){
        if(isConfirm){
                swal(['receive',data['data']]);
        }else{
            swal(['cancel','thanks']);
        }
    });
});
person Rahman    schedule 02.02.2016

Требовалось лишь небольшое изменение моей формы. Кнопка отправки не нажимается, когда форма отправляется через Javascript. Таким образом, значение delete_alert никогда не устанавливается.

Удаление кнопки отправки и добавление поля ввода решило проблему.

Правильная форма:

<form id="form" action="index.php" method="POST">
    <input type="hidden" name="delete_alert' value="delete" />
</form>

Спасибо Barmar за указание на это.

person Nijn    schedule 03.02.2016