Próbowałem znaleźć sposób na określenie wywołania Ajax w Laravel, ale nie znalazłem żadnego dokumentu na ten temat.
Mam index()
funkcję, z którą chcę radzić sobie w różnych sytuacjach w zależności od charakteru żądania. Zasadniczo jest to metoda kontrolera zasobów, która jest powiązana z żądaniem 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'));
}
Znam inne metody określania żądania Ajax w PHP, ale chcę czegoś konkretnego dla Laravel.
Dzięki
Zaktualizowano:
Próbowałem użyć
if(Request::ajax())
{
echo 'Ajax';
}
Ale otrzymuję błąd: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context
Klasa pokazuje, że nie jest to metoda statyczna.
Illuminate\Http\Request;
w moich kontrolerach. Dziękirequest()->ajax()
Dzięki!Aby sprawdzić żądanie AJAX, możesz użyć
if (Request::ajax())
Uwaga: jeśli używasz laravel 5, to w kontrolerze wymień
use Illuminate\Http\Request;
z
use Request;
Mam nadzieję, że to zadziała.
źródło
Używasz złej
Request
klasy. Jeśli chcesz używać Fasady w następujący sposób:Request::ajax()
musisz zaimportować tę klasę:use Illuminate\Support\Facades\Request;
I nie
Illumiante\Http\Request
Innym rozwiązaniem byłoby wstrzyknięcie instancji prawdziwej klasy żądania:
public function index(Request $request){ if($request->ajax()){ return "AJAX"; }
(Teraz musisz zaimportować
Illuminate\Http\Request
)źródło
$ request-> wantJson ()
Możesz spróbować,
$request->wantsJson()
jeśli$request->ajax()
nie działa$request->ajax()
działa, jeśli Twoja biblioteka JavaScript ustawia nagłówek X-Requested-With HTTP.Domyślnie Laravel ustawia ten nagłówek w js / bootstrap.js
window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
W moim przypadku użyłem innego kodu frontendu i musiałem ręcznie wstawić ten nagłówek,
$request->ajax()
aby działał.Ale
$request->wantsJson()
sprawdzi zapytanie axios bez potrzeby nagłówkaX-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
źródło
if(Request::ajax())
Wygląda na właściwą odpowiedź. http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax
źródło
Dla tych, którzy pracują z front-endem AngularJS , nie używa nagłówka Ajax, którego oczekuje laravel. ( Czytaj więcej )
Użyj Request :: WantJson () dla AngularJS:
if(Request::wantsJson()) { // Client wants JSON returned }
źródło
Ci, którzy wolą używać pomocników laravel, mogą sprawdzić, czy żądanie nie pochodzi z ajax, używając
request()
helpera laravel .if(request()->ajax()) // code
źródło
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')); }
źródło
Czasami
Request::ajax()
nie działa, a następnie użyj\Request::ajax()
źródło
po zapisaniu kodu jQuery przeprowadź tę walidację na swojej trasie lub w kontrolerze.
$.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';} });
źródło