Как сделать много форм на ajax?

Есть таблица, в этой таблице, в зависимости от значение выводиться форма. То есть форм много, но обращаются все к одному файлу:

if ($row['status'] == 1) {
echo "<form method='post' action='javascript:void(0);' onsubmit='table_boost_status()'  class='form_status'>
<input name='status' value='1' type='hidden'>
<input  name='id' value='".$row["id"]."' type='hidden'>
<button type='submit'  name='submit' class='btn btn-xs btn-success'><i class='fa fa-refresh'></i></button>
  </form>
  ";
}
if ($row['status'] == 2) {
echo "
<form method='post' action='javascript:void(0);' onsubmit='table_boost_status()' class='form_status'>
<input name='status' value='2' type='hidden'>
<input name='id' value='".$row["id"]."' type='hidden'>
<button type='submit'   name='submit' class='btn btn-xs btn-success'><i class='fa fa-refresh'></i></button>
</form>
";
}


обрабатывается JS так:
function table_boost_status() { //Ajax отправка формы
    var msg = $(".form_status").serialize();
    $.ajax({
        type: "POST",
        url: "/plugins/status_boost.php",
        data: msg,
        success: function (data) {
            
        },
        error: function (xhr, str) {
            alert("Возникла ошибка!");
        }
    });
}

PHP:

$id = $_POST['id'];
$status = $_POST['status'];

$sql = "UPDATE orders SET status='2' WHERE id='$id';";
$sql1 = "UPDATE orders SET status='3' WHERE id='$id';";

if ($status == 1 || $status == 2)  {

if ($status == 1) {
mysql_query($sql);	 
}
if ($status == 2) {
mysql_query($sql1);	 
}
}


При клике на кнопку выполняется запрос для последней строки из таблицы, а по идее должно для той, в которой кликаю.
Как сделать, что бы именно для этой?
  • Вопрос задан
  • 624 просмотра
Пригласить эксперта
Ответы на вопрос 2
sabramovskikh
@sabramovskikh
var msg = $(".form_status").serialize();

Берется только из последней формы с этим классом, если 10 форм, то данные будут взяты из 10 формы.
Нужно использоваться $(this) или что-то вроде этого, чтобы брать из формы которую отправляют
Ответ написан
@kapitan7830
можно, например, к формам добавлять уникальные id и получать данные таким образом
<form id="form_id" method='post' action='javascript:void(0);' onsubmit='table_boost_status()' class='form_status'>

var msg = $("#form_id").serialize();
UPD:
Как вариант чтобы получить данные нужной формы добавляем this
<form id="form_id" method='post' action='javascript:void(0);' onsubmit='table_boost_status(this)' class='form_status'>

И затем немного меняем функцию
function table_boost_status(form) { //Ajax отправка формы
    var msg = form.serialize();
    $.ajax({
        type: "POST",
        url: "/plugins/status_boost.php",
        data: msg,
        success: function (data) {
            
        },
        error: function (xhr, str) {
            alert("Возникла ошибка!");
        }
    });
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы