Задать вопрос

Laravel 4 Ajax подгрузка?

Привет. Подскажите как реализовать ajax подгрузку контента в Laravel 4. Необходим самый примитивный пример. Интересует не отправка формы, а именно подгрузка контента при нажатии на кнопку "Показать ещё".
Самый примитивный пример подскажите, дальше я уже разберусь сам.
Пусть будет несколько параграфов с текстом, к примеру 5. И кнопка "показать ещё". При нажатии на которую, подгружается еще одна строчка.
  • Вопрос задан
  • 5894 просмотра
Подписаться 5 Оценить 2 комментария
Решения вопроса 1
cyberS7
@cyberS7 Автор вопроса
Реализация проста.
Добавляем в head для защиты от csrf
<meta name="csrf-token" content="<?php echo csrf_token(); ?>">

Добавляем кнопку.
<button type="button" id="loading-example-btn" data-loading-text="Loading..." class="btn btn-primary noradius" style="margin:0px auto">
  Показать ещё
</button>
Добавляем блок в который будем загружать контент. Указываем в нём id="content"
<code lang="html">
<div id="content"></div>
</code>

Скрипт:
<script>
  $('#loading-example-btn').click(function () {
        var btn = $(this)
        btn.button('loading')
        $.ajax({
    		    url: "more", // url запроса
                    cache: false, 
                    data: { ids: ids }, // если нужно передать какие-то данные
                    type: "POST", // устанавливаем типа запроса POST
                    beforeSend: function(request) {  // нужно для защиты от CSRF
        return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
    },
                   	success: function(html) { $('#content').append(html);} //контент подгружается в div#content
    }).always(function () {
      btn.button('reset')
    });
    return false
  });

</script>


в routes.php
// POST-запрос при нажатии на нашу кнопку.
Route::post('more', array('before'=>'csrf-ajax', 'as'=>'more', 'uses'=>'HomeController@getMoreEvents'));

// Фильтр, срабатывающий перед пост запросом.
Route::filter('csrf-ajax', function()
{
    if (Session::token() != Request::header('x-csrf-token'))
    {
        throw new Illuminate\Session\TokenMismatchException;
    }
});


И сам контроллер.
...
public function getMoreEvents()
	{	
		if (Request::ajax()) {
		$ids=$_POST['ids']; // в моём случае пост запросом передается массив чисел вида [1,2,3,4...], здесь я этот массив принимаю.
		return View::make('home.more')->with('more', Model::whereNotIn('id','!=', $ids))->get(); //делаем запрос в базу данных, получаем статьи в которых нет id из массива $ids
		}
	}

Если что-то непонятно описал. Задавайте вопросы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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