#php #jquery #ajax #calendar
#php #jquery #ajax #Календарь
Вопрос:
Я создаю календарь с 2 ссылками, одна из которых возвращается на месяц назад, а другая — на месяц вперед.
Это мой cal.php Файл:
<div class='cal_wrapper' id='cal'>
<?php
echo "<a href='cal.php?month=mamp;year=y'>Prev Month</a>";
echo "<a href='cal.php?month=mamp;year=y'>Next Month</a>";
echo $calendar;
?>
</div>
То, что я пытаюсь сделать, это использовать jquery / ajax для обновления того, что находится внутри cal_wrapper div, без необходимости обновлять страницу. Я усердно искал, но не могу найти никаких примеров того, как это можно сделать без использования HTML-формы. Как я могу отправить 2 переменные через запрос GET, месяц и год, должно быть довольно простым .. но я собираюсь косоглазо пытаться найти что-то в Интернете..
Ответ №1:
Сначала укажите ваши классы ссылок
echo "<a class='month_selector' href='cal.php?month=mamp;year=y'>Prev Month</a>";
echo "<a class='month_selector' href='cal.php?month=mamp;year=y'>Next Month</a>";
Затем загружайте содержимое ajax-запроса в div-оболочку всякий раз, когда была нажата одна из этих ссылок.
$('#cal_wrapper a.month_selector').live(function(e){
$('#cal_wrapper').load( $(this).attr('href') );
e.preventDefault();
});
РЕДАКТИРОВАТЬ вы можете использовать.загрузка для загрузки фрагментов страницы с помощью #wrapper_div
$('#cal_wrapper a.month_selector').live('click', function(e){
$('#cal_wrapper').load( $(this).attr('href') ' #wrapper_div' );
e.preventDefault();
});
Поэтому оберните свой cal_wrapper div в #wrapper_div, и приведенный выше код загрузит только содержимое wrapper div. Используйте live вместо click, поскольку вы динамически вставляете ссылки.
Комментарии:
1. Посмотрите на свою консоль, какие ошибки вы получаете, если они есть?
2. проблема заключается в двойных кавычках в атрибуте класса.
3. Это делало то, что должно было делать. Еще одна проблема, с которой я сталкиваюсь, заключается в том, что этот календарь является частью более крупной страницы с гораздо большим содержанием. Поэтому, когда я нажимаю на предыдущую / следующую ссылку, она загружает всю страницу в div cal_wrapper. Как я могу просто обновить то, что в div cal_wrapper?
Ответ №2:
Просто исправляю ответ выше. Вам нужно использовать метод jquery «live», потому что содержимое div cal_wrapper будет меняться (всякий раз, когда вы нажимаете на ссылку «next / prev»)
Поместите содержимое ниже в «основной файл». Первая загрузка (внутри onready) загрузит первый месяц и год.
<script type="text/javascript">
$(document).ready(function() {
$('.call_wrapper').load('cal.php?month=mamp;year=y');
$('.cal_wrapper a.pagination').live('click', function(){
var link = $(this).attr('href');
$('.cal_wrapper').load(link);
e.preventDefault();
});
});
</script>
<div class='cal_wrapper' id='cal'></div>
И ваш cal.php (удалите тег div из него)
<?php
echo "<a class="pagination" href='cal.php?month=mamp;year=y'>Prev Month</a>";
echo "<a class="pagination" href='cal.php?month=mamp;year=y'>Next Month</a>";
echo $calendar;
?>
Комментарии:
1. Получение ошибки в вашем javascript, который вы предоставили. Неперехваченная синтаксическая ошибка: неожиданный токен } домашняя страница_cal_test.php:18перехваченная ошибка ссылки: $ не определен
2. Включите jquery перед тегом js (внутри iframe)
3. Это было, все еще не работает. Кстати, на моей главной странице я включил cal.php страница. Я не использую фреймы. Спасибо за помощь.
4. В скрипте произошла ошибка. Исправлено. (после e.preventDefault())