2015-05-10 7 views
14

dies ist mein Test Ajax in Laravel 5 (siehe unten)Ajax-Post in Laravel 5 return Fehler 500 (Internal Server Error)

$("#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 
}); 

und der Auslöser Link

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

und meine Strecke

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

aber es gibt mir Fehler, wenn ich die Konsole in Google Chrome ausführen und es gibt nicht die erwartete Antwort "return 'S Zugriff! Ajax in Laravel 5' ;“

POST http://juliver.laravel.com/test 500 (Internal Server Error)

was falsch/Problem zu meinen Code etwas im fehlt

Antwort

37

Während diese Frage eine Weile besteht, aber keine akzeptierte Antwort gegeben wird, möchte ich Sie auf die Lösung hinweisen. Da Sie mit ajax senden und vermutlich immer noch die CSRF-Middleware verwenden, müssen Sie Ihrer Anforderung einen zusätzlichen Header hinzufügen.

hinzufügen Meta-Tag auf jeder Seite (oder Master-Layout): <meta name="csrf-token" content="{{ csrf_token() }}">

Und fügen Sie (innerhalb der Seite oder Abschnitt), um Ihre Javascript-Datei:

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

https://laravel.com/docs/master/csrf#csrf-x-csrf-token Siehe für weitere Details .

+0

Ich deaktiviert CSRF von Laravel, aber 500 Fehler erhalten. Kann ich warum wissen? – 151291

+0

Überprüfen Sie auch Ihre Routen. Wenn es einen Tippfehler in der Route gibt, gibt es auch 500 Fehler –

1

standardmäßig Laravel mit CSRF Middleware kommt? .

Sie haben 2 Möglichkeiten:

  1. senden tok en in Ihnen
  2. Disable CSRF-Middleware (nicht empfohlen) anfordern: in app \ Http \ Kernel.php entfernen VerifyCsrfToken von $ Middleware-Array
3

In App \ Http \ Middleware \ VerifyCsrfToken.php Sie die Aktualisierung versuchen könnte, Datei zu etwas wie:

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); 
    } 
}; 

Dies ermöglicht es Ihnen, bestimmte Routen explizit zu umgehen, die Sie nicht überprüfen möchten, ohne die csrf-Validierung global zu deaktivieren.

7

Ich denke, das inzwischen gelöst wurde, aber immer noch das Beste, was hier zu tun ist, das Token mit dem Formular

{!! csrf_field() !!} 

und dann in Ihrer Ajax zu senden

$("#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 
}); 
+0

Ich deaktiviert CSRF von Laravel Kernal, aber bekommen 500 Fehler während Ajax Call, darf ich wissen, warum? – 151291

+1

check in Ihrer Datei laravel.log befindet sich in Storage/Logs Ordner –

+0

Ja, es befindet sich in Speicher/logs – 151291

7

90% des Der interne Serverfehler Laravel Ajax ist auf fehlendes CSRF-Token zurückzuführen. Andere Gründe können inlucde:

  • Falsche Request (zB Postweg zu erhalten)
  • Falscher Datentyp recived (zB Ajax erwartet JSON und App gibt string)
  • Ihre .htaccess misconfigured ist
  • fehlende Routen
  • Code Fehler

Sie diesen lesen kann weiter in Details hier: https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/

1

für mich diese Fehlerursache von verschiedenen Sachen. ich habe zwei ajax call auf meiner seite. erste für Speichern Kommentar und eine weitere für Speichern wie. in meinem routes.php hatte ich dies:

Route::post('posts/show','[email protected]_comment'); 
Route::post('posts/show','[email protected]_like'); 

und ich bekam 500 internen Serverfehler für meinen wie Ajax-Aufruf speichern. , also ändere ich den HTTP-Anforderungstyp der zweiten Zeile in PUT, und der Fehler verschwindet. können Sie auch PATCH verwenden. vielleicht hilft es.

1

Mit Post jquery hatte stattdessen half mir, dieses Problem zu lösen

$.post('url', data, function(response) { 
    console.log(response); 
}); 
2

Sie können Ihre URLs zu VerifyCsrfToken.php Middleware hinzufügen. Die URLs werden von der CSRF-Überprüfung ausgeschlossen.

protected $except = [ 
    "your url", 
    "your url/abc" 
]; 
0

Sie haben das csrf Feld durch Ajax passieren schauen Sie bitte auf den Code hier

$.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"); 
              } 

             } 

            }); 

und Sie müssen auch dieses Eingabefeld schreiben, bevor diese

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

wenn Sie noch Verstehen Sie bitte nicht, genießen Sie dieses Video https://www.youtube.com/watch?v=ykXL8o0slJA&t=20s

+0

Nur Code-Antworten werden abgeraten, weil sie nicht erklären, wie sie das Problem beheben. Bitte aktualisieren Sie Ihre Antwort, um zu erklären, wie sich dies bei den anderen akzeptierten und aufgewerteten Antworten, die diese Frage bereits enthält, verbessert. Siehe: [Wie schreibe ich eine gute Antwort] (https://stackoverflow.com/help/how-to-answer). – FluffyKitten

Verwandte Themen