17.01.2019, 16:53
|
Кандидат Javascript-наук
|
|
Регистрация: 25.10.2018
Сообщений: 102
|
|
Как настроить получение переменной с другой страницы с помощью Ajax
Здравствуйте всем на форуме!!!
У меня есть плагин пагинации Bootpag, который размещен на странице index.php. Код выглядит вот так:
$("#results").load("fetch_pages.php"); //начальная страница
$(".pagination").bootpag({
total: <?= $pages; ?>,
page: 1,
maxVisible: 3,
leaps: false,
next: 'Вперед »',
prev: '« Назад'
}).on("page", function(e, num){
e.preventDefault();
$("#results").prepend('<div class="loading-indication"><img src="/ajax-loader.gif" /> Loading...</div>');
$("#results").load('fetch_pages.php', {'page':num} ).hide().fadeIn(500);
});
Со страницы fetch_pages.php происходит загрузка выборки из БД с разным колличеством результатов. В плагине есть настройка колличества страниц 'total'...
Подскажите как динамически подгружать значение $pages, со страницы fetch_pages.php, чтоб колличество страниц соответствовало объему выборки...?
|
|
17.01.2019, 17:30
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
$("#results").load("fetch_pages.php");
$.post("fetch_pages.php", { total: true }, function(total) {
$(".pagination").bootpag({
total: total,
page: 1,
maxVisible: 3,
leaps: false,
next: 'Вперед »',
prev: '« Назад'
}).on("page", function(e, num){
e.preventDefault();
$("#results").prepend('<div class="loading-indication"><img src="/ajax-loader.gif" /> Loading...</div>');
$("#results").load("fetch_pages.php", { page: num }).hide().fadeIn(500);
});
});
Когда к fetch_pages.php делается POST запрос с данными total=true, то в PHP можно в самом начале сделать такое
if(isset($_POST['total'])) {
header('Content-type: application/json');
echo '47';
exit;
}
Вместо 47 надо возвратить настоящее количество
Последний раз редактировалось Malleys, 17.01.2019 в 17:34.
|
|
17.01.2019, 17:56
|
Кандидат Javascript-наук
|
|
Регистрация: 25.10.2018
Сообщений: 102
|
|
Круто!!! Работает)) Спасибо за ваше время!!!
|
|
17.01.2019, 20:20
|
Кандидат Javascript-наук
|
|
Регистрация: 25.10.2018
Сообщений: 102
|
|
Malleys, еще один вопрос к вам по этой теме, если можно...
В этом же коде по выборке, у меня есть кнопка на удаление переменных для сортировки, которые находятся в сессии...
Перемення total уменя обнавляется при сортировке, но при нажатии на удаление переменных, total не обнавляет значение...
Может подскажете как наладить обнавление total при удалении этих переменных...?
$("#delete").click(function () { $("#select_like").load("like.php #delete_like "); });
$(".sort a").click(function () {
var id = $(this).attr('id');
$.ajax({
url:'/',
data:'sort_id='+id,
success: function (html) { $("#results").load('fetch_pages.php').hide().fadeIn(500); }
});
});
В этом коде я удаляю сессии переменных при нажатии на id='delete', загружаю сообщение об удалении и вывожу обновленную выборку без учета сортировки...
Последний раз редактировалось Zhenyaxxxx, 17.01.2019 в 20:23.
|
|
18.01.2019, 11:39
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Zhenyaxxxx, у вас получается, что для обслуживания одной операции требуется запрос к трем страницам, а если к одной?
|
|
18.01.2019, 12:12
|
Кандидат Javascript-наук
|
|
Регистрация: 25.10.2018
Сообщений: 102
|
|
Сидел вчера, экпериментировал, вроде что-то получилось... Но получилось так что код погинации Bootpag я подключаю три раза и получился длиннющий код... Может можно его как то уменьшить...?
$(document).ready(function () {
/*------------- первый раз при загрузке страницы------------------- */
$("#results").load("fetch_pages.php"); //начальная страница
$("#select_like").load("like.php #fetch_like ");
$("#delete").click(function () { $("#select_like").load("like.php #delete_like "); $(".rand-d, .rand-p").prop("selected",true); });
$(".sort-p").change(function () { $(".rand-d").prop("selected",true); });
$(".sort-d").change(function () { $(".rand-p").prop("selected",true); });
$.post("fetch_pages.php", { total: true }, function(total) { /*---------total-----------*/
$(".pagination").bootpag({
total: total,
page: 1,
maxVisible: 3,
leaps: false,
next: 'Вперед »',
prev: '« Назад'
}).on("page", function(e, num){
e.preventDefault();
/* $("#results").prepend('<div class="loading-indication"><img src="../images/loading17.gif" /> Загрузка...</div>'); */
$("#results").load('fetch_pages.php', {'page':num} ).hide().fadeIn(500);
$(".sort-d, .sort-p, .sort").change(function () { $(".rand-p").prop("selected",true); });
});
});
/*--------------второй раз при событии, если была сортировка ----------*/
$("#results").load("fetch_pages.php"); //начальная страница
$(".sort-d, .sort-p, .sort").change(function () {
var id = $(this).val();
$.ajax({
url:'https://ensy.com.ua',
data:'sort_id='+id,
success: function (html) {
$("#results").load('fetch_pages.php').hide().fadeIn(500);
$("#select_like").load("block/like.php #fetch_like ");
$("#delete").click(function () { $("#select_like").load("like.php #delete_like "); $(".rand").prop("selected",true); });
$.post("fetch_pages.php", { total: true }, function(total) { /*---------total-----------*/
$(".pagination").bootpag({
total: total,
page: 1,
maxVisible: 3,
leaps: false,
next: 'Вперед »',
prev: '« Назад'
}).on("page", function(e, num){
e.preventDefault();
/* $("#results").prepend('<div class="loading-indication"><img src="../images/loading17.gif" /> Загрузка...</div>');*/
$("#results").load('fetch_pages.php', {'page':num} );
});
});
}
});
});
/* -------------- и третий раз, если нажата кнопка на удаление сортировки--------------*/*/
$(".sort a").click(function () {
var id = $(this).attr('id');
$.ajax({
url:'/',
data:'sort_id='+id,
success: function (html) { $("#results").load('fetch_pages.php').hide().fadeIn(500);
$.post("fetch_pages.php", { total: true }, function(total) { /*---------total-----------*/
$(".pagination").bootpag({
total: total,
page: 1,
maxVisible: 3,
leaps: false,
next: 'Вперед »',
prev: '« Назад'
}).on("page", function(e, num){
e.preventDefault();
/* $("#results").prepend('<div class="loading-indication"><img src="../images/loading17.gif" /> Загрузка...</div>');*/
$("#results").load('fetch_pages.php', {'page':num} );
});
});
}
});
});
});
|
|
18.01.2019, 14:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Я вот о чем:
пусть перед асинхронным запросом запрос к fetch_pages.php еще логичен, но за ним сразу запрос к like.php, это уже напряг. А вот дальше при асинхронном запросе
url:'https://ensy.com.ua',
data:'sort_id='+id
делать опять запросы по этим адресам, это уже нечто. Серверу ведь по ключу и типу запроса достаточно понять источник, а значит еще на стороне сервера можно просто подключить эти страницы и вернуть их пользователю.
Последний раз редактировалось laimas, 18.01.2019 в 14:11.
|
|
18.01.2019, 17:05
|
Кандидат Javascript-наук
|
|
Регистрация: 25.10.2018
Сообщений: 102
|
|
У меня сейчас мозг взорвется... Я новичек в этом деле и функции с Ajax пока слабо понимаю, делаю методом тыка... Как это на стороне сервера подключить страницы...?
|
|
18.01.2019, 17:31
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Zhenyaxxxx
|
функции с Ajax пока слабо понимаю
|
Ajax тут вообще боком. Дело не в нем, а как отдавать запрошенное клиентом. Если из вашего кода удалить асинхронный обмен с сервером, то это будет означать следующее (если чисто по вашему подходу) - запрос страницы fetch_pages.php, которая что-то сохраняет, затем перенаправление на страницу like.php, которая подцепляет сохраненное и т.д. с несколькими переходами выдаст результат клиенту. А это накладно. Но никто не отменял подключения, то есть в зависимости от запроса сервер подключает другие сценарии и возвращает результат.
С асинхронными запросами тоже самое - пришел запрос на удаление, значит сервер знает, что нужно удалить и вернуть клиенту результат работы N сценариев, которые он подключает. Следовательно в Ajax будет запрос всего по одному url, то есть всего одно подключение.
|
|
|
|