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 ma route
Route::post('test', function()
{
return 'Success! ajax in laravel 5';
});
mais cela me donne une erreur lorsque je lance la console dans google chrome et il ne renvoie pas la réponse attendue "return 'Success! ajax in laravel 5';"
POST http://juliver.laravel.com/test 500 (erreur interne du serveur)
quoi de mal/problème à mon code? quelque chose que je manque?
Bien que cette question existe pendant un certain temps, mais aucune réponse acceptée n’est donnée, je voudrais vous indiquer la solution. Étant donné que vous envoyez avec ajax et que vous utilisez probablement encore le middleware CSRF, vous devez fournir un en-tête supplémentaire avec votre demande.
Ajoutez une méta-étiquette à chaque page (ou disposition maître): <meta name="csrf-token" content="{{ csrf_token() }}">
Et ajoutez à votre fichier javascript (ou à une section de 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.
90% de l'erreur laravel ajax internal server est due à un jeton CSRF manquant. D'autres raisons peuvent expliquer ce qui suit:
Vous pouvez lire plus à ce sujet en détail ici: https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/
Je suppose que cela a déjà été résolu, mais la meilleure chose à faire ici est d’envoyer le jeton avec votre formulaire.
{!! csrf_field() !!}
et puis dans votre ajax
$("#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
});
Vous pouvez ajouter vos URL au middleware VerifyCsrfToken.php. Les URL seront exclues de la vérification CSRF.
protected $except = [
"your url",
"your url/abc"
];
Dans App\Http\Middleware\VerifyCsrfToken.php, vous pouvez essayer de mettre à jour le fichier pour obtenir 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 itinéraires spécifiques que vous ne voulez pas vérifier sans désactiver la validation csrf globalement.
pour moi cette erreur cause de trucs différents. J'ai deux appel ajax dans ma page. le premier pour sauvegarder le commentaire et un autre pour le sauvegarder, comme. dans mon routes.php j'avais ceci:
Route::post('posts/show','PostController@save_comment');
Route::post('posts/show','PostController@save_like');
et j'ai eu 500 erreur de serveur interne pour ma sauvegarde comme appel ajax. donc je change le type de requête http seconde ligne en PUT et l'erreur disparaît. vous pouvez aussi utiliser PATCH. peut-être que ça aide.
Par défaut Laravel est livré avec le middleware CSRF.
Vous avez 2 options:
Utiliser post jquery m'a aidé à résoudre ce problème
$.post('url', data, function(response) {
console.log(response);
});
vous devez passer le champ csrf via ajax s'il vous plaît regardez 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 également écrire ce champ de saisie avant cette
<input id="signup-token" name="_token" type="hidden" value="{{csrf_token()}}">
toujours si vous ne comprenez pas s'il vous plaît profiter de cette vidéo https://www.youtube.com/watch?v=ykXL8o0slJA&t=20s
n'oubliez pas d'ajouter "utilisez Illuminate\Http\Request;" sur votre contrôleur