Запросы ajax в Laravel

Это код пример драйвера и нормальное управление (не AJAX) Request или запроса.

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

use Illuminate\Routing\Controller;

class UserController extends Controller
{
    /**
     * Store a new user.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $name = $request->input('name');
        //
    }
}

Что я должен делать для того, чтобы оно функционировало также для запросов AJAX в функции store() ?

Если я верю в другую функцию storeAjax() , я могу включать ее в routes.php (с новым распределенным маршрутом) и функционируй, но это не хорошая практика, так как у меня есть 2 маршрута и дебет быть тем же самым для обоих запросов.

7
задан 01.05.2017, 11:54
4 ответа

Может быть, это смогло помогать тебе:

if($request->ajax()){ }//procesa la peticion ajax 
else{return $view;} //retornas por ejemplo,una vista

Относительно Routes.php, нет необходимости изменять, что ты делаешь в твоем JS, так это request типа GET:

$.ajax(type: 'GET', ...)

И ты обрабатываешь просьбу, я надеюсь, что он помогает тебе.

5
ответ дан 08.11.2019, 21:06

Используй следующий пример, чтобы создавать функцию самого могущественного драйвера.

  • Мы контролируем, если просьба приходит из просьбы AJAX или нет, и возвращаем ответ в JSON или Redirect в зависимости от случая
  • Использование Try/Catch, чтобы захватывать ошибки
  • Использование Log для реестра ошибок

-

public function store()
{
    $data = [
        'name'  =>  Input::get('name'),
    ];

    try
    {
        $result = $this->repository->create($data);
    }
    catch (Illuminate\Database\QueryException $e)
    {
        Log::error("YourController@store: register your error", array('created_by' => Auth::user()->id, 'message' => $e->getMessage());

        if (!Request::ajax())
        {       
            return Redirect::back()
                ->with('type_message', "danger")
                ->with('message', trans('web.error'))
        }
        else
        {
            return "{\"result\":\"ko\",\"error\":\"$e->getMessage()\"}";
        }
    }

    if ($result)
    {
        if (!Request::ajax())
        {
            Log::info("YourController@store: Created OK", array('created_by' => Auth::user()->id, 'result' => $result->toArray()));

            return Redirect::back()
                ->with('type_message', "success")
                ->with('message', trans("web.created_ok"));
        }
        else
        {
            return "{\"result\":\"ok\",\"id\":\"$result->id\",\"name\":\"$result->name \"}";
        }
    }
    else
    {
        return "{\"result\":\"ko\",\"error\":\"Hubo un error guardando\"}";
    }
}

Пример просьбы AJAX:

$.ajax({
        url: "{{ route('my_route')}}",
        data: "name="+name+"&_token={{ csrf_token()}}",
        dataType: "json",
        method: "POST",
        success: function(result)
        {
            if (result['result'] == 'ok')
            {

            }
            else
            {

            }
        },
        fail: function(){
        },
        beforeSend: function(){
        }
    });
});

Создай маршрут, который указывал бы на метод Store твоего драйвера, который подаст тебя так для просьб с формуляра как для просьб AJAX:

Route::post('/my_route', array('as' => 'my_route', 'uses' => 'YourController@store'));
4
ответ дан 08.11.2019, 21:06

Не необходимо осуществлять другой mГ©todo.

, Если оно ты не функционирует, может быть благодаря тому, что Laravel 5 включает одну validaciГіn token CSRF, по причине безопасности, во все просьбы POST, УДАР В ЛУНКУ и DELETE. Ты должен включать этот token в ней peticiГіn.

ты Можешь видеть различные mГ©todos, чтобы включать этот token в ней documentaciГіn чиновник: http://laravel.com/docs/5.1/routing#csrf-protection

3
ответ дан 08.11.2019, 21:06

Ты можешь пробовать с этим

public function store(Request $request)
{
    if($request->ajax())
    {
        $name = $request->input('name');
        Response->json($name);
    }
}
0
ответ дан 08.11.2019, 21:06

Теги

Похожие вопросы