Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Jquery плагин DataTable отправка POST AJAX (https://javascript.ru/forum/jquery/66994-jquery-plagin-datatable-otpravka-post-ajax.html)

kuliev 22.01.2017 11:15

Jquery плагин DataTable отправка POST AJAX
 
Вложений: 2
Доброго времени суток.

Использую плагин DataTable для вывода списка студентов.
Как видно из первого скрина выводятся данные в модальное окно, на против каждого студента имеется чекбокс, так вот если я выбираю на первой странице 3х студентов за тем перехожу на вторую и выбираю там 3х студентов то при субмите приходят данные с того листа на котором нажал кнопку добавить. А с первого листа ничего не приходит. Как реализовать чтобы можно было отмечать студентов по разным листам и чтобы они добавлялись в POST запрос. Спасибо.

giratek 22.01.2017 11:37

Накапливать данные о студентах, выбранных на предыдущих страницах в js, а потом отправлять их одним махом на последней

kuliev 22.01.2017 11:52

Цитата:

Сообщение от giratek (Сообщение 441871)
Накапливать данные о студентах, выбранных на предыдущих страницах в js, а потом отправлять их одним махом на последней

Если не затруднит, набросай пример.

рони 22.01.2017 12:01

Цитата:

Сообщение от kuliev
набросай пример.

а ваш пример где? какой сейчас код?

kuliev 22.01.2017 12:22

Цитата:

Сообщение от рони (Сообщение 441874)
а ваш пример где? какой сейчас код?

Хвастать особо не чем, пока банальный код отправки формы с помощью AJAX. Сейчас гуглю как собрать массив отмеченных чекбоксов.

/*** ДОБАВЛЯЕМ СЛУШАТЕЛЯ В ГРУППУ ***/
	//Ajax add std grp
	$('#formAddStdGrp').submit(function(e){
		e.preventDefault();
		var form = $('#formAddStdGrp');
		$.ajax({
			type: form.attr('method'),
			url: form.attr('action'),
			data: form.serialize(),
			dataType: "json",
			success: function(data){
				$('.resp').html('<div class="alert alert-success"><p>'+ data.ok +'</p></div>')
				setTimeout(function(){
					$(location).href('http://site/?mode=45&idGroup='+data.id);
				}, 1500);
			}
		})
		
	});

рони 22.01.2017 12:28

Цитата:

Сообщение от kuliev
Сейчас гуглю как собрать массив отмеченных чекбоксов.

строка 9

рони 22.01.2017 12:35

Цитата:

Сообщение от kuliev
$(location).href

где можно посмотреть документацию на $.href ?

kuliev 22.01.2017 12:36

Цитата:

Сообщение от рони (Сообщение 441879)
строка 9

Что строка 9? На ней сереализуются данные для отправки полученые с формы. При пагинации таблицы данные DOM "теряются" и форма видит только те поля которые отображены в данный момент и при сабмите отправляет все с того листа где нахожусь.

Решением является сборка отмеченных чекбоксов на стороне клиента использую JS.

Вот что нашел, сейчас буду прикручивать!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Select Multiple Rows With Checkboxes</title>
    <link href="css/bootstrap.min.css" rel="stylesheet"/>
    <link href="css/dataTables.bootstrap.min.css" rel="stylesheet"/>
    <link href="css/dataTables.checkboxes.css" rel="stylesheet"/>
</head>
<body>
    
    <div class="container" style="margin:15px auto">
        <form id="myform" method="post">
            <p><b>Selected rows data</b></p>
            <pre id="view-rows"></pre>
            <p><b>Form data as submitted to the server</b></p>
            <pre id="view-form"></pre>
            <p><button class="btn btn-danger">View Selected</button><br/></p>
            <table id="mytable" class="table table-bordered table-striped table-hover">
                <thead>
                    <tr>    
                        <th></th>  
                        <th>Name</th>  
                        <th>Position</th>  
                        <th>Office</th>  
                        <th>Extn.</th>  
                        <th>Start date</th>  
                        <th>Salary</th>
                    </tr>
                </thead>
                <tfoot>
                    <tr>    
                        <th></th>  
                        <th>Name</th>  
                        <th>Position</th>  
                        <th>Office</th>  
                        <th>Extn.</th>  
                        <th>Start date</th>  
                        <th>Salary</th>
                    </tr>
                </tfoot>
            </table>
        </form>
    </div>

    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/jquery.dataTables.min.js"></script>
    <script src="js/dataTables.bootstrap.min.js"></script>
    <script src="js/dataTables.checkboxes.min.js"></script>
    <script>
    $(document).ready(function(){
        var mytable = $("#mytable").DataTable({
            ajax: 'data.json',
            columnDefs: [
                {
                    targets: 0,
                    checkboxes: {
                        seletRow: true
                    }
                }
            ],
            select:{
                style: 'multi'
            },
            order: [[1, 'asc']]
        })
        $("#myform").on('submit', function(e){
            var form = this
            var rowsel = mytable.column(0).checkboxes.selected();
            $.each(rowsel, function(index, rowId){
                $(form).append(
                    $('<input>').attr('type','hidden').attr('name','id[]').val(rowId)
                )
            })
            $("#view-rows").text(rowsel.join(","))
            $("#view-form").text($(form).serialize())
            $('input[name="id\[\]"]', form).remove()
            e.preventDefault()
        })
    })
    </script>
</body>
</html>

kuliev 22.01.2017 13:41

Тему можно закрыть, проблема решена, кому интересно смотрите тут https://www.youtube.com/watch?v=k3cwPmdrkm4


Часовой пояс GMT +3, время: 14:06.