Я пытаюсь найти способ определить 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. }