Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec une requête ajax

    2 août 2020 à 21:05:53

    Bonjour à tous,

    Je suis actuellement entrain de développer un site sur laravel et actuellement je m'occupe du panier plus précisément de la quantité des produits, cependant, lorsque j'effectue mon script y a cette erreur qui s'affiche dans ma console : 

    patch http://ecommerce/mon-panier/e421...  501 (Not Implemented) 
    Response {type: "basic", url:"http://ecommerce/mon-panier/e421...", redirected: false, status : 501, ok : false, ...}

    Voici le script js de cette page : 

    <script>
        var selects = document.querySelectorAll('#qty');
        Array.from(selects).forEach((element) => {
            element.addEventListener('change', function () {
                var rowId = element.getAttribute('data-id');
                var token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
                fetch(`/mon-panier/${rowId}`,
    					{
    						headers: {
    							"Content-Type": "application/json",
    							"Accept": "application/json, text-plain, */*",
    							"X-Requested-With": "XMLHttpRequest",
    							"X-CSRF-TOKEN": token
    						},
    						method: 'patch',
    						body: JSON.stringify({
    							qty: this.value
    						})
    				}).then((data) => {
    					console.log(data);
    					location.reload();
                	}).catch((error) => {
                    	console.log(error);
                	}); 
            });
        });
    	console.log(selects); 
    </script>

    Voici mon code html : 

    							<select class="custom-select" name="qty" id="qty" data-id="{{ $product->rowId }}">
    								@for ($i = 1; $i <= 6; $i++)
    									<option value="{{ $i }}" {{ $product->qty == $i ? 'selected' : ''}}> 
    										{{ $i }}
    									</option>
    								@endfor
    							</select>

    Et voici ma fonction update dans mon controller : 

    public function update(Request $request, $rowId)
        {
            $data = $request->json()->all(); 
    
            $validator = Validator::make($request->all(), [
                'qty' => 'required|numeric|between:1,5',
            ]);
    
            if ($validator->fails()) {
                Session::flash('danger', 'La quantité du produit ne doit pas dépassé 6');
                return response()->json(['error' => 'Cart Quantity Has Not Been Updated']);
            }
    
            Cart::update($rowId, $data['qty']);
    
            Session::flash('success', 'La quantité de ce produit est passée à ' . $data['qty'] . '.');
            return response()->json(['success' => 'Cart Quantity Has Been Updated']);
        }

    et voici la route correspondant à cela : 

    Route::patch('/mon-panier/{rowId}', 'CartController@update')->name('cart.update'); 
    

    Je n'arrive pas du tout à savoir mon erreur, malgré de nombreuses recherches sur internet ..

    Si quelqu'un peut m'aider, ça serait vraiment sympa ^^

    Merci d'avance !!




    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      3 août 2020 à 9:36:02

      Je ne sais pas si c'est la cause mais les verbes HTTP sont généralement écrit en majuscule. Est-ce que method: 'PATCH' change quelque chose ?

      Si non pourrais-tu poster les en-têtes de la requête et réponse ?

      • Partager sur Facebook
      • Partager sur Twitter
        3 août 2020 à 14:59:43

        Lorsque je met :
        method : 'PATCH'
        ça me met cette erreur la : 
        PATCH http://ecommerce/mon-panier/88aad65 405(Method Not Allowed)

        --> Si non pourrais-tu posterles en-têtes de la requête et réponse ? 

        Je débute alors pourrais tu m'indiquer ou je peux trouver cela stp ? 

        -
        Edité par mr_debutant 3 août 2020 à 14:59:57

        • Partager sur Facebook
        • Partager sur Twitter
          3 août 2020 à 15:43:40

          Salut,

          Click droit sur ta page => "Inspecter" => Onglet "Network" => Tu lances ton script => Tu sélectionne la requête => Tu copies ce que tu as dans l'onglet "Headers".

          -
          Edité par BrainError 3 août 2020 à 16:19:29

          • Partager sur Facebook
          • Partager sur Twitter
            3 août 2020 à 16:20:14

            Voici ce que j'ai : 

              1. Request URL:
                http://ecommerce/public/mon-panier
              2. Request Method:
                GET
              3. Status Code:
                200 OK
              4. Remote Address:
                [::1]:80
              5. Referrer Policy:
                no-referrer-when-downgrade
            1. Response Headersview source
              1. Cache-Control:
                no-store, no-cache, must-revalidate
              2. Cache-Control:
                no-cache, private
              3. Connection:
                Keep-Alive
              4. Content-Type:
                text/html; charset=UTF-8
              5. Date:
                Mon, 03 Aug 2020 14:12:38 GMT
              6. Expires:
                Thu, 19 Nov 1981 08:52:00 GMT
              7. Keep-Alive:
                timeout=5, max=99
              8. Pragma:
                no-cache
              9. Server:
                Apache/2.4.41 (Win64) PHP/7.4.0
              10. Set-Cookie:
                XSRF-TOKEN=eyJpdi...; expires=Mon, 03-Aug-2020 16:12:38 GMT; Max-Age=7200; path=/; samesite=lax
              11. Set-Cookie:
                laravel_session=eyJ...; expires=Mon, 03-Aug-2020 16:12:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
              12. Transfer-Encoding:
                chunked
              13. X-Powered-By:
                PHP/7.4.0
            2. Request Headersview source
              1. Accept:
                text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
              2. Accept-Encoding:
                gzip, deflate
              3. Accept-Language:
                fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
              4. Cache-Control:
                max-age=0
              5. Connection:
                keep-alive
              6. Cookie:
                PHPSESSID=e7nu....; XSRF-TOKEN=ey...; laravel_session=eyJp...
              7. Host:
                ecommerce
              8. Referer:
                http://ecommerce/public/mon-panier
              9. Upgrade-Insecure-Requests:
                1
              10. User-Agent:
                Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.

            -
            Edité par mr_debutant 3 août 2020 à 16:20:50

            • Partager sur Facebook
            • Partager sur Twitter
              3 août 2020 à 17:02:09

              Ça s'est la requête GET de la page (tu le vois en ligne 2), pas la requête PATCH qui te pose problème.

              Tu dois lancer ton script avec ta requête PATCH et chopé son "compte-rendu" dans l'onglet "headers" de celle-ci.

              • Partager sur Facebook
              • Partager sur Twitter
                3 août 2020 à 17:32:40

                Je ne trouve pas ce que tu le demande... 

                On est bien d'accord que pour lancer le script j'ai juste a sélectionner une autre quantité que 1 dans mon selecteur ? 

                • Partager sur Facebook
                • Partager sur Twitter
                  3 août 2020 à 19:30:16

                  Oui, tout en gardant l'inspecteur ouvert sur l'onglet "network" (chrome n'enregistre pas automatiquement les requêtes si l'onglet n'est pas ouvert.)

                  Tu devrais alors te retrouver avec une nouvelle ligne qui correspond à ta requête.

                  Tu dois retrouver au moins deux informations : la méthode "PATCH" et le statut code "405" si c'est la bonne requête.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 août 2020 à 19:44:56

                    ahh oui en effet, j'ai trouvé : 

                    j'ai donc cela : 

                    Request URL: http://ecommerce/mon-panier/37d0213..
                    Request Method: PATCH
                    Status Code: 405 Method Not Allowed
                    Remote Address: [::1]:80
                    Referrer Policy: no-referrer-when-downgrade
                    Allow: HEAD,GET,POST,OPTIONS,TRACE
                    Connection: Keep-Alive
                    Content-Length: 306
                    Content-Type: text/html; charset=iso-8859-1
                    Date: Mon, 03 Aug 2020 17:43:47 GMT
                    Keep-Alive: timeout=5, max=100
                    Server: Apache/2.4.41 (Win64) PHP/7.4.0
                    Accept: application/json, text-plain, */*
                    Accept-Encoding: gzip, deflate
                    Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
                    Connection: keep-alive
                    Content-Length: 11
                    Content-Type: application/json
                    Cookie: PHPSESSID=e7n...; XSRF-TOKEN=eyJ..; laravel_session=eyJpd...
                    Host: ecommerce
                    Origin: http://ecommerce
                    Referer: http://ecommerce/public/mon-panier
                    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
                    X-CSRF-TOKEN: XrrOF...
                    X-Requested-With: XMLHttpRequest
                    {qty: "4"}
                    qty: "4"



                    -
                    Edité par mr_debutant 3 août 2020 à 19:52:44

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 août 2020 à 8:18:00

                      Salut,

                      Ben tu as ta réponse :

                      Request URL: http://ecommerce/mon-panier/37d0213..
                      Request Method: PATCH
                      Status Code: 405 Method Not Allowed
                      ...
                      Allow: HEAD,GET,POST,OPTIONS,TRACE
                      ...

                      "PATCH" ne fait pas partie des méthodes autoriser sur cette URI : https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#:~:text=14.7%20Allow,(Method%20Not%20Allowed)%20response.

                      C'est un problème coté serveur du coup.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 août 2020 à 12:10:00

                        ahh d'accord, tu saurais comment je pourrais résoudre cela ? 

                        Ps : J'utilise comme serveur Wamp

                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 septembre 2021 à 18:22:53

                          Svp vous avez pu  résoudre l'erreur ?

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème avec une requête ajax

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          • Editeur
                          • Markdown