Задать вопрос
  • Laravel 4 Ajax подгрузка?

    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
    		}
    	}

    Если что-то непонятно описал. Задавайте вопросы.
    Ответ написан
    1 комментарий