J'ai essayé de trouver un moyen de déterminer l'appel ajax à Laravel mais je ne trouve aucun document à ce sujet.
J'ai une fonction index()
que je veux gérer différemment en fonction de la nature de la demande. En gros, il s'agit d'une méthode de contrôleur de ressources liée à la requête 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'));
}
Je connais les autres méthodes de détermination de la demande Ajax dans PHP mais je veux quelque chose de spécifique à Laravel.
Merci
Mis à jour:
J'ai essayé d'utiliser
if(Request::ajax())
{
echo 'Ajax';
}
Mais je reçois une erreur: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context
La classe montre qu'il ne s'agit pas d'une méthode statique.
Peut-être que cela aide. Vous devez vous référer à la @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";
}
Pour vérifier une demande ajax, vous pouvez utiliser if (Request::ajax())
Remarque: Si vous utilisez laravel 5, dans le contrôleur, remplacez
use Illuminate\Http\Request;
avec
use Request;
J'espère que ça va marcher.
Vous utilisez la mauvaise classe Request
. Si vous voulez utiliser la façade comme: Request::ajax()
, vous devez importer cette classe:
use Illuminate\Support\Facades\Request;
Et pas Illumiante\Http\Request
Une autre solution consisterait à injecter une instance de la classe de demande réelle:
public function index(Request $request){
if($request->ajax()){
return "AJAX";
}
(Maintenant, vous devez importer Illuminate\Http\Request
)
if(Request::ajax())
Cela semble être la bonne réponse . http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax
Ceux qui préfèrent utiliser les assistants laravel peuvent vérifier si une requête est ajax en utilisant laravel request()
helper.
if(request()->ajax())
// code
Pour ceux qui travaillent avec AngularJS front-end, il n’utilise pas l’en-tête Ajax attendu par laravel. ( Lire la suite )
Utilisez Request :: wantedJson () pour AngularJS:
if(Request::wantsJson()) {
// Client wants JSON returned
}
Parfois, Request::ajax()
ne fonctionne pas, utilisez alors \Request::ajax()
Vous pouvez essayer $request->wantsJson()
si $request->ajax()
ne fonctionne pas
$request->ajax()
fonctionne si votre bibliothèque JavaScript définit un en-tête HTTP X-Requested-With.
Par défaut, Laravel a défini cet en-tête dans js/bootstrap.js
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
Dans mon cas, j'ai utilisé un code frontal différent et je devais mettre cet en-tête manuellement pour que $request->ajax()
fonctionne.
Mais $request->wantsJson()
vérifiera la requête axios sans avoir besoin d’un en-tête 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
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'));
}
après avoir écrit le code jQuery, effectuez cette validation dans votre route ou dans le contrôleur.
$.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';}
});