Intereting Posts
Как мне разрешить доступ к учетной записи google-сервиса google без учета приложений Google? Получить имя пользователя Windows текущего пользователя с помощью php? Как сайты, такие как геолокация сегмента Groupon, основаны на городах, в которых они имеют дело? Обнаружение переломов в руке с использованием обработки изображений Сравнение десятичных знаков в PHP С PHP / GD, как мне обрезать изображение? Вы не выбрали файл для загрузки. PHP-код воспламенителя Числа в кавычках с использованием json_encode () PHP с помощью Declare? Что такое тик? fwrite (): операция SSL завершилась неудачно с кодом 1. OpenSSL Сообщения об ошибках: \ nerror: 1409F07F: Подпрограммы SSL: SSL3_WRITE_PENDING: неудачная попытка записи в PHP Преобразование кода PHP в C ++ Многостраничный сайт WordPress (включен сетевой режим) вставлять выбранные данные в качестве внешнего ключа и SQLSTATE : нарушение ограничения целостности: 1048 Окончательное решение для использования regex для удаления вложенных тэгов html того же типа? Возвращает массив массивов массивов объектов

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

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

Может быть, это помогает. Вы должны отсылать @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 . Если вы хотите использовать Facade как: 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

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

Использовать Request :: needsJson () для AngularJS:

 if(Request::wantsJson()) { // Client wants JSON returned } 
 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')); } 

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

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

после написания кода 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::ajax() не работает, затем используйте \Request::ajax()

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