Как использовать AJAX с Laravel?
у Меня есть select, который, когда я изменить значение его, он должен изменить порядок списка, ex.: id, имя пользователя, etc. без Laravel, я хотел бы использовать функцию onchange
и перейду стандарт сортировки pra страницу PHP, что бы распечатать этот список отсортирован по мне...
, Но как это сделать с помощью Laravel? Я должен генерировать view? Попытался, но не смог...
пытался здесь, я думаю, что я не хватает в час, что создает views..
у меня есть view макет, который имеет @yeld ('content')
, в случае, если мне нужно обновить только эту content, однако, когда я делаю:
$this->layout->content = View::make('usuarios.index', $variaveis);
. Он дублирует мой макет внутри div content
//Следует controller
if(Request::ajax()){
$usuarios = Usuario::orderBy(Input::get('order'),'ASC')->get();
$variaveis = array('usuarios' => $usuarios);
return View::make('usuarios.index', $variaveis);;
}else{
$usuarios = Usuario::orderBy('id','ASC')->get();
$variaveis = array('usuarios' => $usuarios);
$this->layout->content = View::make('usuarios.index', $variaveis);
}
Но он это никогда не приходить в Request::ajax (), и я не могу понять, почему
4 answers
Только попасть Request::ajax()
, когда запрос выполняется через Ajax! :-)
Но, внимание: это проверяется с помощью HTTP-заголовка HTTP_X_REQUESTED_WITH
. Эта header будет автоматически отправлено на запросы Ajax, сделанные jQuery и другими библиотеками JavaScript, но если вы не используете, нужно добавить его, чтобы Laravel, признайте, что вызов Ajax:
XHR.setRequestHeader("X-Requested-With", "XmlHttpRequest");
Другой альтернативой является использование различных функций в контроллере: Ajax другую информацию нормы, и оставить в if (Request::ajax())
Твой вопрос не с laravel. Ты должен сделать то же самое, выбирает события с javascript и собирает результат таким же образом, что ты делал до laravel.
В laravel тебе будет забрать твою функция, которая делает select и сделать что-то, более или менее
public function getConsulta()
{
//tua consulta normal...
if (Request::ajax())
{
return Response::json($dados);
}
}
В javascript, который ты должен взять этот json и обработать, чтобы сделать update в таблице
, Как ты, это, возвращая все в твоей каналы и отобразить все это, ты, может сделать это в твой layout
@if(!Request::ajax())
// teu código normal quando não é ajax
@else
@yield('content') // isso vai fazer renderizar só a tua view
@endif
Необходимо сделать это, потому что ты та давая extends в твоей view
В твой controller ты иди, пока не сможете изменить, оставив его так
$usuarios = Usuario::orderBy(isset(Input::get('order'))?Input::get('order'):'id','ASC')->get();
$variaveis = array('usuarios' => $usuarios);
return View::make('usuarios.index', $variaveis);;
Будет работать, чтобы твои две ситуации, когда будет или не ajax.
Я не понимаю lavarel
, работа с zend
и я думаю, что это работает в основном так же, в ajax, вам придется сделать какой-то запрос, чтобы получить этот возврат, то есть, в вашем controller
будет необходимости создает action
только, чтобы удовлетворить этот запрос, и каналы, чтобы подключить содержание...его я делал в zend, я должен был бы дать disable layout
, что он использует только содержание каналы конкретной, вероятно, в lavarel это должно быть есть...
- Это в основном одно и то же, просто замените каталоги и вставить токен при отправке формы, ниже приведен пример, который я реализовал здесь:
$.ajax({
headers: {
'X-CSRF-Token': $('input[name="_token"]').val()
},
type: 'GET',
url: "{{ URL::to(teste/ajax) }}",
data: 'nome='+$('input[name="nome"]').val(),
enctype: 'multipart/form-data',
success: function(data){
$(location).attr('href', "{{ URL::to(Request::path()) }}");
},
error: function(){
alert('Erro no Ajax !');
}
});