Laravel - vérifier si la demande Ajax


96

J'ai essayé de trouver un moyen de déterminer l'appel ajax dans Laravel mais je ne trouve aucun document à ce sujet.

J'ai une index()fonction que je souhaite gérer différemment selon la nature de la demande. Fondamentalement, 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 requête Ajax en PHP mais je veux quelque chose de spécifique à Laravel.

Merci

Actualisé:

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.

Réponses:


191

Peut-être que cela aide. Vous devez vous référer au @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";
        }

Vous avez raison. Cela fonctionnera dans mon cas car j'utilise l'espace de noms de Illuminate\Http\Request;dans mes contrôleurs. Merci
Raheel

1
Vous pouvez également utiliser "request () -> ajax ()" si nécessaire
badcom

Je peux confirmer que cela fonctionne dans la version 5.2. J'ai utilisé l'aide request()->ajax()Merci!
cbloss793

22

Pour vérifier une requête 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.


20

Vous utilisez la mauvaise Requestclasse. Si vous souhaitez 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 requête réelle:

public function index(Request $request){
    if($request->ajax()){
        return "AJAX";
    }

(Maintenant, ici, vous devez importer Illuminate\Http\Request)


vous avez raison. J'ai corrigé ça. Un autre gars a mis une déclaration d'utilisation ci-dessus et je ne l'ai pas regardé. Merci :)
Raheel

16

$ request-> wantJson ()

Vous pouvez essayer $request->wantsJson()si $request->ajax()cela 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 définit 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 j'ai dû mettre cet en-tête manuellement pour $request->ajax()qu'il 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

9
if(Request::ajax()) 

Cela semble être la bonne réponse. http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax


1
Je ne sais pas si c'est ce que vous voulez dire, mais Laravel utilise le modèle de conception Façade pour que vos appels puissent être effectués comme des méthodes statiques: laravel.com/docs/4.2/facades#facade-class-reference Ce lien montre un liste des façades utilisées par Laravel. L'utilisez-vous dans un contrôleur?
Matthew Way

J'utilisais une mauvaise déclaration d'utilisation. désolé Mais merci pour un aperçu de Façades :) Ceci est informatif.
Raheel


6

Ceux qui préfèrent utiliser les helpers laravel peuvent vérifier si une requête est ajax en utilisant laravel request()helper.

if(request()->ajax())
   // code

2
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'));
}

2

Parfois Request::ajax()ne fonctionne pas, puis utilisez\Request::ajax()


Cela ne fonctionnera pas si l'espace de noms n'est pas utilisé. En tout cas merci
Raheel

0

après avoir écrit le code jquery effectuez cette validation dans votre route ou dans controller.

$.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';}
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.