web-dev-qa-db-de.com

ajax post in laravel 5 return error 500 (Internal Server Error)

dies ist mein Test Ajax in laravel 5 (siehe unten)

$("#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 die Trigger-Verbindung

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

und meine Route

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

aber es gibt mir eine Fehlermeldung, wenn ich die Konsole in Google ausführe chrome und es gibt nicht die erwartete Antwort "return 'Success! ajax in laravel 5';"

POST http://juliver.laravel.com/test 500 (Interner Serverfehler)

was ist falsch/Problem mit meinem Code? Fehlt mir etwas?

19
Juliver Galleto

Diese Frage existiert zwar schon eine Weile, aber es wird keine akzeptierte Antwort gegeben. Ich möchte Sie auf die Lösung hinweisen. Da Sie mit Ajax senden und vermutlich immer noch die CSRF-Middleware verwenden, müssen Sie Ihrer Anfrage einen zusätzlichen Header hinzufügen.

Fügen Sie jeder Seite (oder jedem Master-Layout) ein Meta-Tag hinzu: <meta name="csrf-token" content="{{ csrf_token() }}">

Und fügen Sie Ihrer Javascript-Datei (oder einem Abschnitt innerhalb der Seite) hinzu:

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

Weitere Informationen finden Sie unter https://laravel.com/docs/master/csrf#csrf-x-csrf-token .

45
Ben

90% des laravel ajax-internen Serverfehlers sind auf das Fehlen eines CSRF-Tokens zurückzuführen. Andere Gründe können dazu führen, dass:

  • Falscher Anfragetyp (z. B. Senden eines Beitrags zum Abrufen)
  • Falscher Datentyp empfangen (z. B. erwartet Ajax JSON und App gibt String zurück)
  • Ihr .htaccess ist falsch konfiguriert
  • Fehlende Route
  • Code Fehler

Weitere Informationen hierzu finden Sie hier: https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/

10
Meta Pakistani

Ich vermute, dies ist inzwischen behoben, aber das Beste, was Sie hier tun können, ist, das Token mit Ihrem Formular zu senden

{!! csrf_field() !!}

und dann in deinem 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
});
7
Khan Shahrukh

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

protected $except = [
    "your url",
    "your url/abc"
];
3
Danish Jamshed

In App\Http\Middleware\VerifyCsrfToken.php können Sie versuchen, die Datei auf Folgendes zu aktualisieren:

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

Auf diese Weise können Sie bestimmte Routen, die nicht überprüft werden sollen, explizit umgehen, ohne die globale CSRF-Validierung zu deaktivieren.

3
aethergy

für mich ist dieser fehler ursache von verschiedenem zeug. Ich habe zwei Ajax-Aufrufe auf meiner Seite. zuerst einen für das Speichern von Kommentaren und dann einen für das Speichern von Kommentaren. in meiner routes.php hatte ich folgendes:

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

und ich habe 500 interne Server-Fehler für meine Save Like Ajax-Aufruf. Also ändere ich den HTTP-Anforderungstyp der zweiten Zeile auf PUT und der Fehler verschwindet. Sie können auch PATCH verwenden. vielleicht hilft es.

1
Setmax

Standardmäßig wird Laravel mit CSRF-Middleware geliefert.

Sie haben 2 Möglichkeiten:

  1. Senden Sie das Token in Ihrer Anfrage
  2. Deaktivieren Sie die CSRF-Middleware (nicht empfohlen): Entfernen Sie in app\Http\Kernel.php VerifyCsrfToken aus dem $ middleware-Array
1
Bostjan

Die Verwendung von post jquery hat mir geholfen, dieses Problem zu lösen

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

sie müssen das CSRF-Feld durch Ajax übergeben. Sehen Sie sich den Code hier an

$.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 vorher schreiben

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

wenn du es immer noch nicht verstehst, genieße bitte dieses Video https://www.youtube.com/watch?v=ykXL8o0slJA&t=20s

1

vergessen Sie nicht "use Illuminate\Http\Request;" auf Ihrem Controller

0
user3608756