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



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



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



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 IlluminateHttpRequest::ajax() should not be called statically, assuming $this from incompatible context



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

636   10  

10 ответов:

может быть, это помогает. Вы должны ссылаться на @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";
        }

для проверки запроса ajax вы можете использовать if (Request::ajax())

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

use Illuminate\Http\Request;

С

use Request; 

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

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

use Illuminate\Support\Facades\Request;

, а не Illumiante\Http\Request


другим решением было бы введение экземпляра реального класса запроса:

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

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

if(Request::ajax()) 

похоже, это правильный ответ. http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax

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

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

для тех, кто работает с AngularJS front-end, он не использует заголовок Ajax, который ожидает laravel. (подробнее)

использовать запрос::wantsJson() для AngularJS:

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

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

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'));
}

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

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

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

$ request - >wantsJson ()

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

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

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

window.axios = require('axios');

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

в моем случае я использовал другой код интерфейса, и мне пришлось поместить этот заголовок вручную для $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

Comments

    Ничего не найдено.