Ajax Post не работает в laravel 5.1

Я пытаюсь отправить данные с помощью ajax в laravel, но, похоже, он не работает. Я следил за моим кодом

login.blade.php

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="csrf_token" content="{{ csrf_token() }}" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <style type="text/css"> </style> <script type="text/javascript"> $(document).ready(function(){ $('.send-btn').click(function(){ console.log($('input[name=email]').val()); $.ajax({ url: 'login', type: "post", data: {'email':$('input[name=email]').val(), '_token': $('input[name=_token]').val()}, success: function(data){ console.log($('input[name=email]').val()); alert(data); } }); }); }); </script> </head> <body> <div class="secure">Secure Login form</div> {!! Form::open(array('url'=>'account/login','method'=>'POST', 'id'=>'myform')) !!} <div class="control-group"> <div class="controls"> {!! Form::text('email','',array('id'=>'','class'=>'form-control span6','placeholder' => 'Email')) !!} </div> </div> <div class="control-group"> <div class="controls"> </div> </div> {!! Form::button('Login', array('class'=>'send-btn')) !!} {!! Form::close() !!} </body> </html> 

и route.php

 Route::get('account/login', function() { return View::make('login'); }); Route::post('account/login', 'AccountController@login'); 

и в контроллере

  public function login() { // Getting all post data if(!Request::ajax()) { $data = Input::all(); print_r($data); } } 

Всякий раз, когда я пытаюсь отправить форму, она не работает. Я попытался использовать оповещение в onclick jquery, но он показывает предупреждение. Может ли кто-нибудь сказать, почему он не работает?

Примечание. Этот вопрос уже задан, но не нашел ответа, полезного для меня.

Laravel 5.1 ajax не работает?

Обновить

 <script type="text/javascript"> $(document).ready(function(){ $('.send-btn').click(function(){ console.log($('input[name=email]').val()); $.ajax({ url: 'login', type: "post", data: {'email':$('input[name=email]').val(), '_token': $('input[name=_token]').val(),'_method': 'POST'}, success: function(data){ console.log($('input[name=email]').val()); alert(data); } }); }); }); </script> 

В безопасности консоли я получаю следующую ошибку

  [HTTP/1.0 500 Internal Server Error 115ms] Update 2 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="csrf_token" content="{{ csrf_token() }}"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <style type="text/css"> </style> <script> $(document).ready(function() { $('#frm').on('submit', function (e) { alert(); e.preventDefault(); var title = $('#title').val(); var body = $('#body').val(); var published_at = $('#published_at').val(); $.ajax({ type: "POST", url: 'http://localhost/demo/public/articles/articles', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, dataType: 'JSON', data: {title: title, body: body, published_at: published_at}, success: function( data ) { $("#ajaxResponse").append(data.msg); alert(data); } }); }); }); </script> </head> <body> {!! Form::open(['url' => 'articles', 'id' => 'frm']) !!} <p> {!! Form::label('title', 'Title:') !!} {!! Form::text('title') !!} </p> <p> {!! Form::label('body', 'Body:') !!} {!! Form::textarea('body') !!} </p> <p> {!! Form::label('published_at', 'Date:') !!} {!! Form::input('date', 'published_at', date('Ym-d'), ['class' => 'form-control']) !!} </p> <p> {!! Form::submit('Submit Article', ['id' => 'submit']) !!} </p> {!! Form::close() !!} </body> </html> 

route.php

 Route::resource('articles', 'ArticlesController'); 

Контроллер статьи

 public function store() { print_r(Request::all()); } 

введите описание изображения здесь

Обновление 2

 [2015-08-28 06:23:03] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:53 Stack trace: #0 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) #1 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) #2 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php(54): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #3 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #4 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) #5 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #6 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #7 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) #8 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #9 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) #10 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) #11 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #12 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) #13 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) #14 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #15 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) #16 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) #17 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #18 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) #19 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(122): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #20 D:\xampp\htdocs\demo\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(87): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #21 D:\xampp\htdocs\demo\public\index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #22 {main} 

Related of "Ajax Post не работает в laravel 5.1"

Форма отлично работает.

Вы просто забыли отправить "_method": "post" в своих данных формы ajax. Laravel использует маршрутизацию Symfony, которая использует специальный параметр _ method для маршрутизации к вашему определению маршрута.

Я вижу неправильный url, названный в определении ajax, должен быть:

 url: 'http://localhost/demo/public/articles', 

В приведенном выше URL-адресе должна храниться статья. Для входа в систему вы должны использовать:

 url: 'http://localhost/demo/public/login', 

В качестве примечания, если ваш сайт изменит URL-адрес домена, вы можете инициализировать URL-адрес через javascript в заголовке:

 <script> var login_url = '{{ url("login") }}'; </script> 

Затем вы можете назвать это следующим образом:

 $.ajax({ type: "POST", url: login_url, 

Я замечаю пару вещей сразу с места. Прежде всего, вы установили свой маршрут POST (в routes.php) на «account / login», но вы устанавливаете URL-адрес .ajax для «входа». Вам нужно установить его на «/ account / login», как и у вас в своем URL-адресе и, что самое главное, в файле маршрутов.

Кроме того, потому что вы используете Laravel {!! Form :: xxx () !!}, вам не нужно включать 'method' => 'POST'. Это будет добавлено автоматически, как и токен CSRF. http://laravelcollective.com/docs/5.0/html#opening-a-form

Кроме того, функция «входа» в вашем контроллере работает только в том случае, если запрос не является AJAX, но вы пытаетесь отправить запрос AJAX, правильно? Всего несколько вещей, чтобы вникать. Надеюсь, поможет.

Как вы можете видеть из исключения, у вас возникла проблема с токеном CSRF. Так почему-то вы не можете отправить токен, вот что вы должны отслеживать.

В исходном вопросе перед обновлениями вы отправляете токен из скрытого элемента формы, например: '_token': $('input[name=_token]').val()

Form::open должна добавить поле в форму, но, вероятно, возникла проблема, поэтому я бы посоветовал вам просмотреть источник страницы, чтобы убедиться, что существует скрытый элемент формы, такой как <input type="hidden" name="_token" value="asdfasfd"> .

И / или вы можете просто ввести $('input[name=_token]').val() в консоли своего браузера, чтобы убедиться, что вы можете достичь значения.


После «обновления 2» вы решили перенести токен CSRF в метатег и отправить его с заголовками, но имя мета – csrf_token но вы ссылаетесь на него в параметрах $ .ajax как csrf-token (тире вместо подчеркивания используется).


Для обоих случаев лучшим способом устранения проблемы является эффективное использование консоли браузеров:

  • Когда вы увидите ошибку в консоли, просто нажмите ссылку, и она переведет вас на вкладку «Сеть».
  • Вы увидите все запросы, найдите свой запрос, посмотрев имя и нажмите его. (Он должен быть выделен на мгновение, но иногда он не отображается, поэтому вам может потребоваться прокрутка вверх или вниз, чтобы найти его).
  • В правой части нажмите вкладку «заголовки» и прокрутите вниз, чтобы увидеть _token X-CSRF-TOKEN и если они пусты или нет.
  • Еще один совет: нажмите «ответ» или «предварительный просмотр», чтобы увидеть ответ сервера, быстрее обнаружить ошибку, а не идти в журналы и т. Д.

Я думаю, что проблема в App/Http/Middleware/Authenticate.php Попробуйте изменить это

 public function handle($request, Closure $next) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { return redirect()->guest('auth/login'); } } return $next($request); } 

К этому:

 public function handle($request, Closure $next) { return $next($request); }