web-dev-qa-db-fra.com

Laravel - vérifier si demande Ajax

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.

65
Raheel Khan

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";
        }
133
Crack_David

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.

17
Jnanaranjan

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)

14
lukasgeiter
if(Request::ajax()) 

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

8
Matthew Way

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
5
lee shin

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 
}
4
Justin

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

2
Nagibaba

$ request-> wantedJson ()

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

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';}
});
0
Muhammad Awais