S
S
Stanislav Kim2014-05-24 21:09:18
JavaScript
Stanislav Kim, 2014-05-24 21:09:18

Laravel 4 Ajax loading?

Hello. Tell me how to implement ajax content loading in Laravel 4. We need the most primitive example. I'm not interested in submitting the form, but in loading the content when you click on the "Show more" button.
Tell me the most primitive example, then I'll figure it out myself.
Let there be several paragraphs with text, for example 5. And the "show more" button. When you click on it, another line is loaded.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Stanislav Kim, 2014-05-25
@cyberS7

The implementation is simple.
Add to head to protect against csrf
Adding a button.

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

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

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

And the controller itself.
...
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
    }
  }

If something is not clear described. Ask questions.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question