Не могу проверить, является ли запрос ajax с $ request-> ajax () и Laravel 5.4 - PullRequest
0 голосов
/ 09 мая 2018

У меня проблема при попытке проверить, является ли запрос ajax. Это мой код:

Маршрут

Route::post('cookies-alert', 'CookiesController@weUseCookies')->name('cookies.weuse');

Контроллер

namespace app\Http\Controllers;

use Illuminate\Http\Request;

class CookiesController extends Controller
{
    public function weUseCookies(Request $request)
    {
        if($request->ajax()){
          return response()->json(['status' => 'successful']);
        }else{
          return response()->json(['status' => 'error']);
        }
    }
}

Форма (с коллективом Laravel, она автоматически создает _token)

{{ Form::open(['route' => ['cookies.weuse', ''], 'method' => 'POST', 'id' => 'cookie-form']) }}
    ....
    <button type="submit">Ok</button>
{{ Form::close() }}

И JS

  $('#cookie-form').on('submit', function(e){
      e.preventDefault();
      // .....
      $.ajax({
        url: url,
        method: 'POST',
        dataType: 'JSON',
        data: data
      }).done( function (response) {
        var res = response;

        if( res.status == 'successful' ){
          console.log(res.status);
        }else{
          showError('error :(');
        }
      });
  });

я пробовал другим способом

$.ajax({
      url: url,
      type: 'POST',
      data: data,
      dataType: 'JSON',
      success: function (data) {
          console.log(data);
      }
  });

и использование jquery 3.2.1 из https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js

Но он всегда возвращает «ошибку» от моего контроллера.

Я также пытался использовать Request :: ajax () подобно this , но он переключает if {} и переходит к варианту else {} из моего контроллера.

Что я делаю не так?

Мой код работает на локальном, но не на сервере

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Request::wantsJson() Он также работает с axios.

0 голосов
/ 09 мая 2018

laravel использует http-заголовок X-Requested-With, чтобы проверить, является ли входящий запрос ajax или нет, а также необходимо добавить поле @csrf в форму:

$.ajax({
  url: url,
  type: 'POST',
  // add _token field for csrf protection
  data: {
    _token : ''
  },
  dataType: 'JSON',
  // add x-forwarded-with also add X-CSRF-TOKEN header for csrf protection 
  headers: {
      'X-Requested-With': 'XMLHttpRequest',
      'X-CSRF-TOKEN': ..,
  }
});

или вы можете использовать axios , потому что Laravel работает с ним лучше:

axios({
    method: 'POST',
    url: 'url',
    data: {
      _token: 'token',
   },
   responseType: 'json',
   headers: {
      'X-Requested-With': 'XMLHttpRequest',
      'X-CSRF-TOKEN': 'token,
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...