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
класса показывает, что это не статический метод.
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 }
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