Базовый запрос ajax get

#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())