Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.11.2013 15:39:41

Обновление данных на странице (AJAX)

Всем добрый день
Пытаюсь тривиальными путями решить следующую задачу
У меня есть страница , на ней выведена таблица и форма ввода с кнопкой "отправить", все отлично работает, но я пытаюсь использовать AJAX для динамического обновления контента на странице, заклеенного в блок.
Вот сам блок

div  id="from_ajax" class="col-md-7 col-md-offset-1">

@if ($Chats->count())


	<table class="table table-striped table-hover table-bordered table-condensed table-hover">
		<thead>
			<tr class="success">
				<th >Время</th>
				<th >Позывной</th>
				<th >Сообщения</th>
				
			</tr>
		</thead>
 
		<tbody>
			@foreach ($Chats as $Chat)
				<tr >
				    <td  ><span class="label label-warning">{{{ date(" d.m",$Chat ->time)}}}</span>{{{date(" H:i:s",$Chat ->time) }}}</td>
					<td  >{{{ $Chat->ch }}} - {{{ $Chat->poz }}}</td>
					<td>
					@if ($Chat->private)
					{{  ($Chat->message)  }} <span class="label  label-danger">Приват</span> 
					@else
					 {{ ($Chat->message)}}
                    @endif
					</td>
				</tr> 	
			@endforeach				
		</tbody>
	</table>
 

</div>	 
	{{ $Chats->links() }}
	
	     {{ Form::open(array('action' => 'ChatsController@store'))  }}

		{{ Form::text('MSG', Input::old('MSG')) }}
		 
		{{ Form::submit('Отправить') }}
		 
		{{ Form::token() . Form::close() }} 

Как правильно написать функцию обновления определенного блока в данном случае?

Был тут http://codething.ru/ajax.php но в моем случае не сработало
Уверен решение просто, помогите пожалуйста

Не в сети

#2 22.11.2013 16:01:51

Re: Обновление данных на странице (AJAX)

Какой блок вы хотите обновить и какую именно функцию вам нужно написать? JavaScript, PHP? Если первое, то тему нужно было в соседний раздел.

Не в сети

#3 22.11.2013 16:12:09

Re: Обновление данных на странице (AJAX)

Спасибо за быстрый ответ
Хотелось бы обновить содержимое блока "div id="from_ajax"" средствами JavaScript
в следуюзий раз тему буду в правильны раздел писать!)

Не в сети

#4 22.11.2013 16:17:26

Re: Обновление данных на странице (AJAX)

Тему перенес.

А что именно не получается с обновлением? По вашей ссылке статья рассказывает, как делать это через AJAX. Самый простой вариант — js$('#from_ajax').load('my/route') — заменит содержимое div целиком на то, что вернул запрос.

Не в сети

#5 22.11.2013 17:02:18

Re: Обновление данных на странице (AJAX)

у меня конкретно не получается div обновить

поправьте меня если я не прав
Для того чтобы можно было динамически обновить страницу, необходимо выполнить ajax запрос , в моем случае к конртеному контроллеру
и в случае успеха подгрузить необходимые данные в выбранный элемент

если я пропишу

setTimeout(function(){
    ('#from_ajax').load('URL::action("ChatsController@index")');
}, 1000);

то страница не обновить конкретную форму т.к. не знает какие конкретно данные необходимо передать в запрос.

А как правильно в случае с Laravel составить ajax запрос?

Контроллер отвечающий за формирование страницы ChatsController@index, контроллер отвечающий за заполнение формы ввода ChatsController@store

Изменено CBETOBuT (22.11.2013 17:03:11)

Не в сети

#6 22.11.2013 17:07:03

Re: Обновление данных на странице (AJAX)

Во-первых, я надеюсь что вместо «гибрида» JavaScript-PHP у вас всё же что-то такое:

PHP
('#from_ajax').load('<?php echo URL::action("ChatsController@index")?>');

Или через {{ URL... }} для Blade.

Во-вторых — верно, если это данные формы, то нужно использовать js$.ajax() с POST. По вашей ссылке этот метод описан как «Пример 3». Ничего сложного.

Не в сети

#7 25.11.2013 16:31:22

Re: Обновление данных на странице (AJAX)

спасибо за разяснение
но всеравно у меня не получаеться

верно ли я понимаю суть работы контроллеров laravel 4

я создал  ChatsController@index котороый мне выводит страницу /chats

public function index()
	{
	    $Chats = $this->Chat->orderBy('time', 'desc')->paginate(18);
		 Profiler::disable();
		return View::make('Chats.index', compact('Chats'));
		 
		
	}

далее метод store отвечающий за сбор данных из формы

	public function store()
	{
		$MSG = Input::get('MSG');  
	    $user = Auth::user()->username;
		if(Input::has('MSG'))
		{
		$this->Chat->insert(array(
		'ch' => 0,
		'poz'=> 0,
		'time'=> time(),
		'message'=>   " <От: $user> "." ".$MSG,
		'private'=> 0
		));
		} 
		return Redirect::route('info.chats.index');
	}

я просто не понимаю что мне загружать ajax запросом ( в парметр sucsees что нужно вставить?)?
могли бы пример с laravel 4 показать ?
у меня задача реализовать чат

Не в сети

#8 28.11.2013 23:18:19

Re: Обновление данных на странице (AJAX)

переделай пример свой так

PHP
<div  id="from_ajax" class="col-md-7 col-md-offset-1">
    {{
View::make('view111'compact($Chats))->render()}}
</
div>

создай представление view111 и положи туда всё что находилось в div id="from_ajax"
и {{ $Chats->links() }} туда же
в function store возвращаем представление view111 с данными как в function index

$Chat ->time это вобще законно? ☺

Не в сети

#9 03.12.2013 12:38:33

Re: Обновление данных на странице (AJAX)

А более корректно будет так.

Я к примеру использую blade шаблон
И соотвественно создал фаил ajaxform.blade.php в views/Chats

@foreach ($Chats as $Chat)
<tr>
    <td><span class="label label-warning">{{{ date(" d.m",$Chat ->time)}}}</span>{{{date(" H:i:s",$Chat ->time) }}}</td>
    <td>{{{ $Chat->ch }}} - {{{ $Chat->poz }}}</td>
    <td>
        @if ($Chat->private)
        {{  ($Chat->message)  }} <span class="label  label-danger">Приват</span>
        @else
        {{ ($Chat->message)}}
        @endif
    </td>
</tr>

@endforeach

Далее в index.blade.php я с помошью шаблона blade вывел действия своего кода, предварительно создав ajax запрос

@section('scripts')
<script type="text/javascript" src="jquery.js"></script>
<script>
    function show() {
        var url = $(this).attr('action');
        $.ajax({
            url:url,
            dataType:'html',
            data: {ajax:true},
            type:'GET',
            success:function(html){
                $('#from_ajax').html(html);
            }
        });
    }
    setInterval(show , 5000)
</script>
@stop

а в самом шаблоне вывел с помощью @include

@include('Chats.ajaxform', array('Chats'=>$Chats))

Не в сети

Подвал раздела