2016-07-21 2 views
3

Я использую Laravel 5 и хотите сделать вызов AJAX к контроллеру с некоторыми данными:Laravel 5: Fetch АЯКС данные маршрута и перейти к контроллеру

$.ajax({ 
    url : "/getOrgById", 
    data : JSON.stringify({id:1}) 
}) 

routes.php имеет:

Route::get('/getOrgById', '[email protected]'); 

HomeController.php:

public function getOrgById($data) { 
    //code here fails with message 'Missing argument 1 for HomeController::getOrgById() 
} 

Как я могу передать данные из Аякса маршрута, а затем Contro Мюллер?

+0

Кажется, что вы приближаетесь к некоторой структуре, подобной CRUD; Я предлагаю вам создать отдельный контроллер и зарегистрировать его с помощью «Route :: resource (« organization »,« OrganizationController »)» и добавить к нему метод «show ($ id)»). Это позволит вам делать «/ организации/1» из коробки. Если вы настаиваете на получении данных, передав параметр запроса, просто удалите '$ data' из метода' getOrgById' и получите доступ к идентификатору с помощью 'Request :: get ('id')'. – Dencker

ответ

4

Я думаю, что в приведенном ниже примере является то, что вы ищете

Route

Route::post('/getOrgById', '[email protected]'); 

Контроллер

public function getOrgById(Request $request) { 
    $id = $request->input('id'); 
} 

JS

var myJsonData = {id: 1} 
$.post('/getOrgById', myJsonData, function(response) { 
    //handle response 
}) 
0

Вы можете использовать Input, чтобы получить вашу переменную

public function getOrgById() { 
    $data = \Input::get('data') 
} 
0

Вы можете определить paramers в маршруте:

Route::get('/getOrgById/{id}', '[email protected]'); 

И называют это через:

$.ajax({ 
    url : "/getOrgById" + id 
}) 
+0

Вы правы в примере, где у меня есть только одна переменная. Но что, если я хочу передать сложный json? –

+0

Вы можете использовать 'Input :: get()' для получения ваших данных – Vuldo

+0

Я думаю, что вы забыли «/» после getOrgById. –

0

Вы были почти правы , но при использовании в объявлении функции $data вы действуете требуя переменную Query String, а не запрос формы.

Вы должны добавить форму запроса в методе контроллера, например, так:

public function getOrgById(Request $request){ 
    // do something here... 
    return response()->json(array('foo' => 'bar')); 
} 
+0

Почему вы возвращаете код статуса 422? –

+0

Как демонстрация функции, ничего больше. Я также возвращаю 422, когда проверка формы терпит неудачу, используя JSON. –

+0

A 422 должен быть отправлен только для ошибок проверки. Учитывая природу переполнения стека, вы должны _not_ включать в качестве «демонстрации» функции что-то вроде кода состояния 422 в успешном запросе. Это неверно, а также не имеет никакого отношения к вопросу, заданному ОП. –

2

Вы должны реально смотреть на изобретательные действия контроллера. Если вы хотите получить организацию по своему идентификатору, тогда у вас есть организация, которая создаст соответствующий организационный контроллер.Этот контроллер может затем иметь метод для шоу организации, путем на его значение первичного ключа:

class OrganisationController 
{ 
    public function show($id) 
    { 
     return Organisation::findOrFail($id); 
    } 
} 

Маршрут для этого будет выглядеть следующим образом:

Route::get('/organisations/{id}', '[email protected]'); 

Затем вы можете запросить этот маршрут через AJAX как так:

$.ajax({ 
    method: 'GET', 
    url: '/organisations/' + id 
}); 
0
 $.ajax({ 
      type:'get', 
      url:'/getOrgById', 
      data:{ 
      id:1 
      } 
      success:function(res){ 
    } 

     }) 

Route::get('/getOrgById', '[email protected]'); 

public function getOrgById(Request $request) { 
    dd($request) 
} 
0

Попробуйте с этим,

HTML Form

<div id="loadingResponse"></div> 
{!!Form::open(array('url'=>'test/submit', 'id'=>'submitForm','method'=>'POST'))!!} 
    {{Form::token()}} 
    <input type="text" name="data"/> 
    <button type="submit" class="btn btn-small btn-info">Send Data</button> 
{{Form::close()}} 

JS Ajax

$("#submitForm").submit(function(event) { 
    event.preventDefault(); 
    $.ajax({ 
     url   : 'test/submit', 
     data  : new FormData($("#submitForm")[0]), 
     dataType : 'JSON', 
     type  : 'POST', 
     beforeSend: function(){ 
      $("#loadingResponse").html("<img src='{{asset('img/loading.gif')}}' />"); 
     }, 
     success: function(response){ 
      console.log(response); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      console.log('Error '+xhr.status+' | '+thrownError); 
     }, 
    }); 
}); 

PHP Route

... 
Route::post("test/submit","[email protected]"); 
... 

PHP контроллер

class TestController extends Controller 
{ 
    ... 
    public function submit(Request $request) 
    { 
     response()->json(['msj' => $request->input('data')]); 
    } 
    ... 
} 
Смежные вопросы