Partage
  • Partager sur Facebook
  • Partager sur Twitter

Laravel - Requête qui ne s'exécute pas

Sujet résolu
    19 janvier 2020 à 14:58:59

    Bonjour à tous,

    Je suis embêté avec une requête Ajax qui semble ne pas s'executer et après plusieurs heures dessus je ne comprends toujours pas ce qui ne va pas.

    Voici ma requête Ajax (le path du fichier est bon, d'autres requêtes y vont et fonctionnent) :

            save_user_project(id_project);
            function save_user_project(data){
                $.ajax({
                    type: 'post',
                    url: '/saveProject',
                    dataType: 'json',
                    data: {
                        id_project : data['id_project'],
                        requestProjectId : 'requestProjectId'
                },
                    success: function(response){
                        console.log('oui ' + response['result']);
                    },
                    error: function(errorThrown){
                        console.log('non ' + response['result']);
                    }
                });
            }
    

    Et voici le code du Controller :

            namespace App\Http\Controllers;
        
            use Illuminate\Http\Request;
            use Illuminate\Validation\Rules\Exists;
            use Image;
            use DB;
            use Validator;
            use Redirect;
            public function saveBookPost(Request $request)
            {
                $userConnected = \Auth::id();
    
                if(isset($userConnected) && $userConnected != NULL && isset($request['id_project']) && isset($request['requestProjectId'])){
                
                    $projectIdExists = DB::table('project_user')
                        ->where('user_id', '=', $userConnected)
                        ->where('id_project', '=', $request['id_project'])
                        ->exists();
    
                    if(!is_null($projectIdExists)){
                        // UPDATE DATE OF UPDATE
                        return response()->json([
                            'success' => true,
                            'result' => ' *** Update date '  + $projectIdExists
                        ]);
                    }
                    else{           
                        // CREATE USER PROJECT ID
                        $id_project = $request['id_project'];
                        $projectIdInsert = DB::table('project_user')->insert(
                            ['userId' => $userConnected,
                            'projectId' => $id_project,
                            'typeProjectId' => 1,
                            'statusId' => 1]
                        );
                        return response()->json([
                            'success' => true,
                            'result' => ' *** Création '  + $projectIdExists
                        ]);
                    }
                }
            }

    Le message de ma console est le suivant : Uncaught ReferenceError: response is not defined

    Merci et bonne journée :)

    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2020 à 17:58:19

      Salut,

      Cette erreur JS signifie que tu as une erreur, tu rentres dans ta ligne 15 de ton JS et évidemment on a pas de variable "response" 

      save_user_project(id_project) , id_project est un objet ? Sinon data['id_project'] va te donner undefined

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        19 janvier 2020 à 19:24:23

        Merci pour ta réponse 👍

        Ca signifie une erreur dans le controller ou coté JS selon toi ?

        save_user_project(id_project) est une simple fonction déclenchée lors d'un clic sur un bouton de sauvegarde qui transmet la variable (id_project) en paramètre. La variable existe et contient bien une clé.

        -
        Edité par MaxQC 19 janvier 2020 à 20:48:33

        • Partager sur Facebook
        • Partager sur Twitter
          19 janvier 2020 à 22:13:51

          Si tu rentres dans 'error'  alors côté PHP tu as aussi une erreur. utilise la console de ton navigateur pour voir ce qu'il en est
          • Partager sur Facebook
          • Partager sur Twitter
          le bienfait n'est jamais perdu
            19 janvier 2020 à 23:11:57

            La console me dit juste que response['result'] ne correspond à rien...

            Je ne comprends vraiment pas ce qui ne va pas côté PHP...

            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2020 à 10:27:53

              Console onglet Réseau pour tracker ton appel AJAX , si response['result''] ne correspond à rien, ça signifie que tu ne rentres pas dans le premier if (L13)
              • Partager sur Facebook
              • Partager sur Twitter
              le bienfait n'est jamais perdu
                21 janvier 2020 à 22:44:04

                Désolé pour la réponse tardive.

                Oui bien sur j'ai regardé aussi mais aucune indication supplémentaire... C'est comme si aucune data ne passait alors que ce que je fais passé en paramètre est simplement une variable créer en haut de page et qui passe parfaitement avec toutes les autres fonctions lors du clic.

                • Partager sur Facebook
                • Partager sur Twitter
                  22 janvier 2020 à 22:15:52

                  Salut Max,

                  Dans ton fichier controller, il n'y a qu'une fonction... cela ne me semble pas très correcte.

                  Tu dois avoir une classe de controller et dans cette classe la fonction.

                  Regarde dans le fichier /routes/web.php ce que tu a défini comme route.

                  tu devrais avoir une truc comme

                  Route::get('/saveProject', 'MonController@saveBookPost');

                  MonController ici set le nom de la classe que tu devra avoir dans ton fichier controller.

                  Daniel

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 janvier 2020 à 14:07:55

                    Salut Daniel,

                    Oui tout à fait d'accord, j'ai juste supprimé énormément d'élément qui sont fonctionnel et confirmé pour que ce soit plus lisible :)

                    Ce que je trouve très étrange dans ce cas-ci c'est que si je mettais juste cela, ça fonctionnerait parfaitement (mais je dois vérifier avant si le numéro existe déjà...

                                // CREATE USER PROJECT ID
                                $id_project = $request['id_project'];
                                $projectIdInsert = DB::table('project_user')->insert(
                                    ['userId' => $userConnected,
                                    'projectId' => $id_project,
                                    'typeProjectId' => 1,
                                    'statusId' => 1]
                                );
                                return response()->json([
                                    'success' => true,
                                    'result' => ' *** Création '  + $projectIdExists
                                ]);



                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 janvier 2020 à 15:45:32

                      Avec ton code problématique, tu as quoi dans ta console JS ? 

                      • Partager sur Facebook
                      • Partager sur Twitter
                      le bienfait n'est jamais perdu
                        23 janvier 2020 à 19:03:43

                        J'ai : Uncaught ReferenceError: response is not defined

                        Car dans ma requête Ajax j'ai demandé à voir response['result'dans mon console.log. Ce qui fonctionne pour toutes mes autres fonctions Ajax.

                        Et ça, peut-importe ce que je mets comme variable pour l'afficher dans mon result, même si j'y mets 'du texte simplement'

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 janvier 2020 à 19:58:17

                          la variable response n'est disponible que dans success,  donc normal le uncaught reference, si tu n'as pas au moins 'oui' dans ta console alors tu as un soucis, une erreur php  par exemple. encore une fois utilise l'onglet réseau pour voir ce que retournes ton appel Ajax
                          • Partager sur Facebook
                          • Partager sur Twitter
                          le bienfait n'est jamais perdu
                            23 janvier 2020 à 22:31:07

                            Je sais bien mais je n'ai aucun retour en particulier. Voici les informations

                              1. Request URL:
                                http://127.0.0.1:8000/saveBook
                              2. Request Method:
                                POST
                              3. Status Code:
                                200 OK
                              4. Remote Address:
                                127.0.0.1:8000
                              5. Referrer Policy:
                                no-referrer-when-downgrade
                            1. Response Headersview parsed
                              1. HTTP/1.1 200 OK Host: 127.0.0.1:8000 Date: Thu, 23 Jan 2020 21:26:39 GMT Connection: close X-Powered-By: PHP/7.3.12 Content-type: text/html; charset=UTF-8
                            2. Request Headersview parsed
                              1. POST /saveBook HTTP/1.1 Host: 127.0.0.1:8000 Connection: keep-alive Content-Length: 0 Accept: application/json, text/javascript, */*; q=0.01 X-CSRF-TOKEN: LkZviSsfFuSdIpz0l7Dc6v9aKcxJimc5ZywoFiqb X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Origin: http://127.0.0.1:8000 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Referer: http://127.0.0.1:8000/app/book Accept-Encoding: gzip, deflate, br Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: localauth=localapi3b7503d83b2d750d:; remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d=eyJpdiI6IkV2eFRNMEZnK3loWnJENEhaV1NQSkE9PSIsInZhbHVlIjoiZ0pjT3VDdnc0NEh6S0pvRDhBSVBWMXFoRW1mbVNzZWs1azF0QjRpYjQxZ3g4NVhrYVVlWGFpcjh4QUpzVGo0dE1TQjAyN3daZW0rdjl6VWkzdTlCTnZ5bEE5M1pCekRUTlJzbkN3NGxyT1RnYmwxS1d1d01xKzVXRk55bnNNYXNYd3lUZlNsNXFwSTVTSjJ3bjIxaDQ3dVV1aUNlSGlqWXh5cFVGRWVkNURzPSIsIm1hYyI6IjRjMmExOGEzYTllYTZkOThhNjg2YTViMmVkZGZjZjhjNmU2MDNhYjQ3NjIxNmVjZGNlMWM0MTU1NzE2YzNkZDcifQ%3D%3D; XSRF-TOKEN=eyJpdiI6IllkaGp2aWpuRDVpaFU4NTk2VWlnNkE9PSIsInZhbHVlIjoiRlcwOFhsaWUxUWRyYUJ5XC9ZVHhVdTlET2hxOFZlUjlMbUwrXC9RWHI5UXVGalB4V2JmWWlSRGF6cm95ZTM5ZUkzIiwibWFjIjoiYzI0NTlkMGE3OWZmMGMyYWU3MjE0NTIxM2VjYzI4MjAwOTkzZjllNGQwYTNjZTcyZjk1MDc3NGM0Njk3MGQ0ZCJ9; laravel_session=eyJpdiI6InlmUzExb05YUEp5RFRBNnFDYW13bWc9PSIsInZhbHVlIjoiRlpEbmI4bHVBcnNNWGhZb29sdTZ2WjZCSGYzZkJmUnRta21iTEphU1diMnZlZjhMY0FWZ2xcL3FIR2Yyb0ZLa0ciLCJtYWMiOiI5OWFlZWI0YTU4YTRkNDI0ZDY5OGVkY2Y3MGZlYWY3NWMwZGRmNWRlMmQ5NmI0MWQyZGVlZTVlYjQxYzgwN2I4In0%3D
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 janvier 2020 à 22:57:11

                              Vu la réponse (Response HeadersView..) tu as un code 200 et un content-type text/html donc comme je l'ai dit dans un autre message la condition de ton premier if est fausse , tu peux faire des dd de tes variables pour voir ce qu'il en est, essaie de mettre un return response()->json(['result' => false]); après le if
                              • Partager sur Facebook
                              • Partager sur Twitter
                              le bienfait n'est jamais perdu
                                24 janvier 2020 à 14:24:36

                                dd ne me donne aucun retour et mes 'result' sont toujours aussi négatif ...

                                Ce que je ne comprends pas c'est que c'est ma variable qui semble ne pas passer alors qu'elle est correcte.

                                Ajax ne l'envoie pas pour une raison qui m'échappe.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 janvier 2020 à 15:33:52

                                  result c'est côté JS (et j'espère que tu l'as corrigé), arrêtons de mélanger les choses, le soucis c'est au niveau de ton code PHP, le dd doit se faire sur  $request et $userConnected ou dd toute condition pour voir si tu as un true.

                                  Pour voir le retour de ton code PHP avec Chrome, console / onglet Réseaux et tu cliques sur l'URL concernée et onglet Aperçu 

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  le bienfait n'est jamais perdu
                                    24 janvier 2020 à 19:15:56

                                    En effet, j'avais lu une mauvaise documentation au sujet de la fonction dd qui n'empêchait de voir réellement ce qui se passe.

                                    J'ai pu voir un problème avec le user connecté et j'ai réglé cela. Merci beaucoup !

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Laravel - Requête qui ne s'exécute pas

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown