ajax post dans laravel 5 retour d'erreur 500 (Erreur Interne du Serveur)

c'est mon test ajax dans laravel 5 (voir ci-dessous)

$("#try").click(function(){
    var url = $(this).attr("data-link");
    $.ajax({
        url: "test",
        type:"POST",
        data: { testdata : 'testdatacontent' },
        success:function(data){
            alert(data);
        },error:function(){ 
            alert("error!!!!");
        }
    }); //end of ajax
});

et le lien de déclenchement

<a href="#" id="try" data-link="{{ url('/test') }}">Try</a>

et mon itinéraire

Route::post('test', function()
{
    return 'Success! ajax in laravel 5';
});

mais il me donne une erreur quand j'exécute la console dans google chrome et il ne renvoie pas la réponse attendue "return' Success! ajax dans laravel 5';"

POST http://juliver.laravel.com/test 500 (Erreur Interne Du Serveur)

quoi de mal/problème de mon code? quoi im manque?

18
demandé sur John Conde 2015-05-10 20:34:25

9 réponses

bien que cette question existe depuis un certain temps, mais aucune réponse acceptée n'est donnée, je voudrais vous orienter vers la solution. Parce que vous envoyez avec ajax, et probablement toujours utiliser l'middleware CSRF, vous devez fournir un en-tête supplémentaire avec votre demande.

ajouter une méta-étiquette à chaque page (ou mise en page principale):<meta name="csrf-token" content="{{ csrf_token() }}">

et ajouter à votre fichier javascript (ou section dans la page):

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

Voir https://laravel.com/docs/master/csrf#csrf-x-csrf-token pour plus de détails.

43
répondu Ben 2018-01-27 20:08:02

90% de l'erreur du serveur interne ajax de laravel est due à un jeton CSRF manquant. d'autres raisons peuvent inlucde:

  • Type de demande erroné(E. g sending post to get)
  • Type de données erroné reçu(E. ajax attend JSON et app renvoie la chaîne de caractères)
  • Votre .htaccess est mal configuré
  • Route Manquante
  • Erreur De Code

vous pouvez lire plus à ce sujet dans les détails ici: https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/

8
répondu Meta Pakistani 2017-01-02 16:59:01

je suppose que cela a été résolu depuis, mais encore la meilleure chose à faire ici est d'envoyer le jeton avec votre formulaire

{!! csrf_field() !!}
$("#try").click(function(){
var url = $(this).attr("data-link");
$.ajax({
    url: "test",
    type:"POST",
    data: { '_token': token, 'someOtherData': someOtherData },
    success:function(data){
        alert(data);
    },error:function(){ 
        alert("error!!!!");
    }
}); //end of ajax
});
7
répondu Khan Shahrukh 2017-12-24 14:38:17

In App\Http\Middleware\VerifyCsrfToken.php vous pouvez essayer de mettre à jour le fichier à quelque chose comme:

class VerifyCsrfToken extends BaseVerifier {

    private $openRoutes =
    [
        ...excluded routes
    ];

    public function handle($request, Closure $next)
    {
        foreach($this->openRoutes as $route)
        {
            if ($request->is($route))
            {
                return $next($request);
            }
        }

        return parent::handle($request, $next);
    }
};

cela vous permet de contourner explicitement des routes spécifiques que vous ne voulez pas vérifier sans désactiver la validation csrf globalement.

3
répondu aethergy 2017-05-16 08:23:52

Vous pouvez ajouter vos URLs pour VerifyCsrfToken.PHP middleware. Les URLs seront exclues de la vérification CSRF.

protected $except = [
    "your url",
    "your url/abc"
];
2
répondu Danish Jamshed 2016-11-27 12:54:14

par défaut Laravel est livré avec CSRF middleware.

vous avez 2 options:

  1. Envoyer le jeton dans vous demande
  2. Désactiver CSRF middleware (non recommandé): dans l'app\Http\Noyau.php supprime VerifyCsrfToken du tableau $ middleware
1
répondu Bostjan 2015-05-10 19:24:40

pour moi cette erreur cause de choses différentes. j'ai deux appels ajax sur ma page. pour enregistrer un commentaire et un autre pour les enregistrer comme. dans mon parcours.php, j'ai eu ceci:

Route::post('posts/show','PostController@save_comment');
Route::post('posts/show','PostController@save_like');

et j'ai eu 500 erreur interne au serveur pour mon enregistrer comme l'appel ajax. je change donc le type de requête http de la deuxième ligne pour mettre et l'erreur disparaît. vous pouvez utiliser PATCH aussi. peut-être que ça aide.

1
répondu Setmax 2016-02-17 15:43:40

L'utilisation de post jQuery à la place m'a aidé à résoudre ce problème

$.post('url', data, function(response) {
    console.log(response);
});
1
répondu cescgie 2016-09-10 12:54:34

vous devez passer le champ csrf par ajax s'il vous plaît regarder le code ici

$.ajax({
                                        type: "POST",
                                        url:'{{URL::to("/delete-specialist")}}',
                                        data: {
                                            id: id,

                                            _token: $('#signup-token').val()
                                        },
                                        datatype: 'html',
                                        success: function (response) {
                                            if(response=="deleted"){
                                                $("#"+id).hide();
                                                $("#message").html("successfully deleted");
                                            }

                                        }

                                    });

et vous devez aussi écrire ce champ d'entrée avant ce

<input id="signup-token" name="_token" type="hidden" value="{{csrf_token()}}">

si vous ne comprenez pas, veuillez profiter de cette vidéo https://www.youtube.com/watch?v=ykXL8o0slJA&t=20s

0
répondu Sayed Khan Prince 2017-10-03 02:37:11