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
Класс показывает, что это не статический метод.
Ответы
Ответ 1
Может быть, это помогает. Вы должны указать @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";
}
Ответ 2
Чтобы проверить запрос ajax, вы можете использовать if (Request::ajax())
Примечание:
Если вы используете laravel 5, то в контроллере замените
use Illuminate\Http\Request;
с
use Request;
Я надеюсь, что это сработает.
Ответ 3
Вы используете неправильный класс 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
)
Ответ 4
if(Request::ajax())
Похоже, это правильный ответ.
http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax
Ответ 5
Для тех, кто работает с внешним интерфейсом AngularJS, он не использует ожидаемый заголовок Ajax. (Читать дальше)
Используйте запрос :: wantJson() для AngularJS:
if(Request::wantsJson()) {
// Client wants JSON returned
}
Ответ 6
Те, кто предпочитает использовать помощников laravel, могут проверить, является ли запрос ajax, используя помощник laravel request()
.
if(request()->ajax())
// code
Ответ 7
$request-> wantsJson()
Вы можете попробовать $request->wantsJson()
если $request->ajax()
не работает
$request->ajax()
работает, если ваша библиотека JavaScript устанавливает HTTP-заголовок X-Requested-With.
По умолчанию Laravel устанавливает этот заголовок в js/bootstrap.js
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
В моем случае я использовал другой код $request->ajax()
интерфейса, и мне пришлось вручную поместить этот заголовок, чтобы $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
Ответ 8
Иногда Request::ajax()
не работает, затем используйте \Request::ajax()
Ответ 9
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'));
}
Ответ 10
после написания кода jquery выполните эту проверку на вашем маршруте или в контроллере.
$.ajax({
url: "/id/edit",
data:
name:name,
method:'get',
success:function(data){
console.log(data);}
});
Route::get('/', function(){
if(Request::ajax()){
return 'it ajax request';}
});
Ответ 11
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.
}