Laravel 5 AJAX 500错误的帖子错误、帖子、Laravel、AJAX

2023-09-10 18:04:29 作者:卸下面具的脸

我想按照这个教程Laravel 5和AJAX 的https:// WWW。 youtube.com/watch?v=PRCm-7mEDkY 这显然作品,但我得到一个500内部服务器错误在POST请求。我究竟做错了什么?我只是想了解一个简单的例子,并从那里工作了。

HTML

 < A HREF =#ID =得与GT;获取和LT; / A>
< HR>
<形式的行动=#>
    <输入类型=文本名称=名称>
    <按钮类型=提交>发送和LT; /按钮>
< /形式GT;
 

JS

  $(函数(){
    $('#GET)。点击(函数(五){

        即preventDefault();

        $获得('类',功能(数据){
            的console.log(数据);
        });
    });

    $(形式)。递交(函数(五){
        即preventDefault();

        .post的$('类',{名字:名字什么'},功能(数据){
            的console.log(数据);
        });
    });

});
 

路线

 路线::职位('/类',函数(){
    如果(支持::阿贾克斯()){
        后续代码var_dump(输入::所有());
        回归AJAX POST请求;
    }
});
 
laravel 500 Server Error,完美解决

存储日志

 #0 /Users/neil/Sites/demo02/app/Http/Middleware/VerifyCsrfToken.php(17):照亮\基金会\ HTTP \中间件\ VerifyCsrfToken->手柄(对象(照亮\ HTTP \请求),对象(关闭))
#1 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125):应用程序\ HTTP \中间件\ VerifyCsrfToken->手柄(对象(照亮\ HTTP \请求) ,对象(关闭))
#2 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(55):照亮\管道\ Pipeline->照亮\管道\ {关闭}(对象(照亮\ HTTP \请求))
#3 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125):照亮\查看\中间件\ ShareErrorsFromSession->手柄(对象(照亮\ HTTP \请求) ,对象(关闭))
#4 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(61):照亮\管道\ Pipeline->照亮\管道\ {关闭}(对象(照亮\ HTTP \请求))
#5 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125):照亮\会议\中间件\ StartSession->手柄(对象(照亮\ HTTP \请求) ,对象(关闭))
#6 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(36):照亮\管道\ Pipeline->照亮\管道\ {关闭}(对象(照亮\ HTTP \请求))
#7 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125):照亮\饼干\中间件\ AddQueuedCookiesToResponse->手柄(对象(照亮\ HTTP \请求) ,对象(关闭))
#8 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(40):照亮\管道\ Pipeline->照亮\管道\ {关闭}(对象(照亮\ HTTP \请求))
#9 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125):照亮\饼干\中间件\ EncryptCookies->手柄(对象(照亮\ HTTP \请求) ,对象(关闭))
#10 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(42):照亮\管道\ Pipeline->照亮\管道\ {关闭}(对象(照亮\ HTTP \请求))
#11 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request),对象(关闭))
#12 [内部功能】:照亮\管道\ Pipeline->照亮\管道\ {关闭}(对象(照亮\ HTTP \请求))
#13 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(101):call_user_func(对象(关闭),对象(照亮\ HTTP \请求))
#14 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111):照亮\管道\ Pipeline->然后(对象(关闭))
#15 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(84):照亮\基金会\ HTTP \内核级> sendRequestThroughRouter(对象(照亮\ HTTP \请求))
#16 /Users/neil/Sites/demo02/public/index.php(53):照亮\基金会\ HTTP \内核级>手柄(对象(照亮\ HTTP \请求))
#17 /Users/neil/Sites/demo02/server.php(21):require_once(/用户/尼尔......)
#18 {}主力
 

解决方案

在laravel 5 CSRF令牌是必需的所有职务的请求。您必须添加 _token 字段后请求体或添加标题 X-CSRF-TOKEN

更多信息

http://laravel.com/docs/master/routing#csrf-protection

一个可行的办法[如果JS是刀片模板中。

  $(函数(){
$('#GET)。点击(函数(五){

    即preventDefault();

    $获得('类',功能(数据){
        的console.log(数据);
    });
});

$(形式)。递交(函数(五){
    即preventDefault();

    .post的$('类',{名字:名求什么,_token:{{csrf_token()}}'},功能(数据){
        的console.log(数据);
    });
});

});
 

I am trying to follow this tutorial for Laravel 5 and AJAX https://www.youtube.com/watch?v=PRCm-7mEDkY which obviously works, but am getting a 500 Internal Server Error on the Post Request. What am I doing wrong? I just want to understand a simple example and work up from there.

HTML

<a href="#" id="get">Get</a>
<hr>
<form action="#">
    <input type="text" name="name">
    <button type="submit">Send</button>
</form>

JS

$(function() {
    $('#get').click(function(e){

        e.preventDefault();

        $.get('categories', function(data) {
            console.log(data);
        });
    });

    $('form').submit(function(e) {
        e.preventDefault();

        $.post('categories', {name:'name anything'}, function(data) {
            console.log(data);
        });
    });

});

Route

Route::post('/categories', function() {
    if(Request::ajax() ) {
        var_dump(Input::all());
        return 'ajax post request';
    }
});

Storage Logs

#0 /Users/neil/Sites/demo02/app/Http/Middleware/VerifyCsrfToken.php(17): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#1 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#2 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(55): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#3 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#4 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(61): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#5 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#6 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(36): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#7 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#8 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(40): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#9 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#12 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#13 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(101): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#14 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#15 /Users/neil/Sites/demo02/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(84): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#16 /Users/neil/Sites/demo02/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#17 /Users/neil/Sites/demo02/server.php(21): require_once('/Users/neil...')
#18 {main}

解决方案

In laravel 5 csrf token is required for all post requests. You will have to add the _token field in post request body or add the header X-CSRF-TOKEN.

More information

http://laravel.com/docs/master/routing#csrf-protection

One possible solution [if the JS is inside the blade template].

$(function() {
$('#get').click(function(e){

    e.preventDefault();

    $.get('categories', function(data) {
        console.log(data);
    });
});

$('form').submit(function(e) {
    e.preventDefault();

    $.post('categories', {name:'name anything', _token: '{{ csrf_token() }}'}, function(data) {
        console.log(data);
    });
});

});