Подтвердить что ты не робот

Laravel - проверьте, требуется ли запрос Ajax

Я пытаюсь найти способ определить вызов ajax в Laravel, но я не могу найти документа об этом.

У меня есть функция index(), которую я хочу обрабатывать по-разному в зависимости от характера запроса. В основном это метод контроллера ресурсов, связанный с запросом GET.

public function index()
    {
        if(!$this->isLogin())
            return Redirect::to('login');

        if(isAjax()) // This is what i am needing.
        {
          return $JSON;
        }

        $data = array();
        $data['records'] = $this->table->fetchAll();

        $this->setLayout(compact('data'));
    }

Я знаю другие методы определения запроса Ajax в PHP, но я хочу что-то конкретное для Laravel.

Спасибо

Обновлено:

Я попытался использовать

 if(Request::ajax())
    {
        echo 'Ajax';
    }

Но я получаю ошибку: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context

Класс показывает, что это не статический метод.

4b9b3361

Ответ 1

Может быть, это помогает. Вы должны указать @param

         /**       
         * Display a listing of the resource.
         *
         * @param  Illuminate\Http\Request $request
         * @return Response
         */
        public function index(Request $request)
        {
            if($request->ajax()){
                return "AJAX";
            }
            return "HTTP";
        }

Ответ 2

Чтобы проверить запрос ajax, вы можете использовать if (Request::ajax())

Примечание: Если вы используете laravel 5, то в контроллере замените

use Illuminate\Http\Request;

с

use Request; 

Я надеюсь, что это сработает.

Ответ 3

Вы используете неправильный класс Request. Если вы хотите использовать Facade как: Request::ajax(), вам необходимо импортировать этот класс:

use Illuminate\Support\Facades\Request;

И не Illumiante\Http\Request


Другим решением будет инъекция экземпляра реального класса запроса:

public function index(Request $request){
    if($request->ajax()){
        return "AJAX";
    }

(Теперь здесь вы должны импортировать Illuminate\Http\Request)

Ответ 5

Для тех, кто работает с внешним интерфейсом AngularJS, он не использует ожидаемый заголовок Ajax. (Читать дальше)

Используйте запрос :: wantJson() для AngularJS:

if(Request::wantsJson()) { 
    // Client wants JSON returned 
}

Ответ 6

Те, кто предпочитает использовать помощников laravel, могут проверить, является ли запрос ajax, используя помощник laravel request().

if(request()->ajax())
   // code

Ответ 7

$request-> wantsJson()

Вы можете попробовать $request->wantsJson() если $request->ajax() не работает

$request->ajax() работает, если ваша библиотека JavaScript устанавливает HTTP-заголовок X-Requested-With.

По умолчанию Laravel устанавливает этот заголовок в js/bootstrap.js

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

В моем случае я использовал другой код $request->ajax() интерфейса, и мне пришлось вручную поместить этот заголовок, чтобы $request->ajax() работал.

Но $request->wantsJson() проверит запрос axios без необходимости заголовка X-Requested-With:

// Determine if the current request is asking for JSON. This checks Content-Type equals application/json.
$request->wantsJson()
// or 
\Request::wantsJson() // not \Illuminate\Http\Request

Ответ 8

Иногда Request::ajax() не работает, затем используйте \Request::ajax()

Ответ 9

public function index()
{
    if(!$this->isLogin())
        return Redirect::to('login');

    if(Request::ajax()) // This is check ajax request
    {
      return $JSON;
    }

    $data = array();
    $data['records'] = $this->table->fetchAll();

    $this->setLayout(compact('data'));
}

Ответ 10

после написания кода jquery выполните эту проверку на вашем маршруте или в контроллере.

$.ajax({
url: "/id/edit",
data:
name:name,
method:'get',
success:function(data){
  console.log(data);}
});

Route::get('/', function(){
if(Request::ajax()){
  return 'it ajax request';}
});

Ответ 11

Request::ajax() и $request->ajax() не работают в моем случае, версия 5.4.x. Я решил эту проблему, добавив дополнительный параметр, указывающий, что запрос является "ajax" вызовом.

Так вот так.

$.ajax({
     method: "post", // or anything,
     data: {
           method: "ajax",
           data: params, //  Here is your data,
           ....
     }

И в контроллере laravel вы можете проверить это.

if ($request->input('method') == 'ajax') {
      // Something to do
} else {
      //  Another things to do.
}