@kostarus61

Как реализовать отправку формы без перезагрузки страницы?

Здравствуете!
Вообщем такая проблема, есть рабочий код для отправки формы без перезагрузки страницы.
Следующий цикл выводит по 9 блоков с формами на страницу:

$q=mysql_query("SELECT * FROM `users` WHERE `id_user` = '$us_id'  ORDER BY `id` DESC LIMIT $start, 9");
while($post=mysql_fetch_array($q)){
        echo"<div id='loadA'><div id='loadB'>"; // обновляем блок после отправки формы и успешного выполнения
	echo "<table class='block_tab_plant' width='158' height='150'><tr></td>";

       Здесь дальше большой кусок кода, выводятся данные из таблицы с формами. 
       Одна из форм для примера
        echo "<form action='' method='post'>
            <input type='hidden' name='seat' value='".$post['id']."'>
            <input type='hidden' name='select' value='".$lp['id']."'>
            <input type='submit' value='Забрать' class='btn_small'>
      </form>";

       echo "</td></tr></table>";
       echo "</div></div>";
}


Ну и соответственно сам код обработки формы:

<script>
$(document).ready(function(){
    $('form').submit(function() {
        var current = $(this).parent().parent();
        var data = $(this).serialize();
        data += '&ajax-request=true';

        $.ajax({
            type: 'POST',
            url: '/ajax/seat.php',
            dataType: 'json',
            data: data,
            success: (function() {
                return function(data) {
		
                     //Обновляем блок
                    if (data.status === 'success') {
						setTimeout("jQuery('#loadA').load('#div #loadB');",1000);
                    }
                };
            })()
        });

        // Останавливаем обработчик
        return false;
    });
});
</script>


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

Если же убрать из скрипта вот этот кусок, то все работает нормально, страница не обновляется, но информация в блоке тоже не обновляется:
if (data.status === 'success') {
setTimeout("jQuery('#loadA').load('#div #loadB');",1000);
}


Что посоветуете в данном случае?
  • Вопрос задан
  • 3689 просмотров
Решения вопроса 1
ddv88
@ddv88
Binance Futures
Странная загрузка через load конечно..
Но по моему как бэ DOM намекает.
Посоветую запихать в
$('form').live('submit', function(){
//сюды отправку формы
)}

И вооще почему бы тебе в success просто не принимать response и затем его уже обрабатывать через if? По таймауту как то не кошерно, да и проблема походу частично кроется в нем, раз говоришь, что обновляется если убрать эту часть.

Что то типа того:
while($post=mysql_fetch_array($q)){
		$result .= "<form action='' method='post'>
		<input type='hidden' name='seat' value='".$post['id']."'>
		<input type='hidden' name='select' value='".$lp['id']."'>
		<input type='submit' value='Забрать' class='btn_small'>
		</form>";
		return json_decode('result' => $result, 'response' => true)
	}


Принимаем в JS
success: function(data) {
var res = JSON.stringify(data);
if (res.response == '1'){
//делаем что тос res.result
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы