2015-03-24 4 views
44

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

У меня есть функция 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

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

+5

Для людей всегда торопится голосовать. Пожалуйста, уделите немного времени, чтобы прокомментировать причину голосования вниз. Спасибо –

ответ

91

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

Вы правы. Это будет работать в моем случае, поскольку я использую пространство имен 'Illuminate \ Http \ Request'' в моих контроллерах. Спасибо –

+1

Вы также можете использовать «request() -> ajax()» при необходимости – badcom

8
if(Request::ajax()) 

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

+0

, пожалуйста, просмотрите обновленную часть –

+1

Я не уверен, что это то, что вы имеете в виду, но Laravel использует шаблон дизайна Facade, чтобы ваши вызовы можно было сделать как статические методы: http://laravel.com/docs/4.2/facades # facade-class-reference Эта ссылка показывает список Фасадов, которые использует Laravel. Используете ли вы его в контроллере? –

+0

Я использовал неправильный оператор использования. извините, но спасибо за обзор фасадов :) Это информативно. –

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

см. Обновленную часть –

12

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

use Illuminate\Support\Facades\Request; 

И не Illumiante\Http\Request


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

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

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

+0

, вы правы. Я это исправил. Некоторый другой парень поставил вышеприведенное заявление, и я не смотрел на это. Спасибо :) –

13

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

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

use Illuminate\Http\Request; 

с

use Request; 

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

0

после написания кода 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';} 
}); 
2

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

Использование Request::wantsJson() для AngularJS:

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

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. 
} 
0

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

+0

Это не сработает, если пространство имен не используется. В любом случае спасибо –

2

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

if(request()->ajax()) 
    // code 
Смежные вопросы