Laravel 5.1 POST 与 ajax,得到错误。用 GET 做它并且它有效
Laravel 5.1 POST with ajax, get error. Do it with GET and it works
所以这是我的第一个 laravel 项目,我无法找出问题所在。
我搜索了几个小时,但没有任何帮助。
{!! csrf_field() !!}
在我的表单中,发送了_token数据
路线:
Route::post('/posts/create', [
'middleware' => 'auth',
"as" => 'post-create',
"uses"=>'PostsController@create'
]);
Ajax:
$.ajax({
url:'{{route('post-create')}}',
type:'POST',
data:form.serialize()
});
Return 对于 ajax:
Remote Address:[::1]:80
Request URL:http://localhost/domain/public/posts/create
Request Method:POST
Status Code:500 Internal Server Error
TokenMismatchException in VerifyCsrfToken.php line 53:
in VerifyCsrfToken.php line 53
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 54
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 118
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 86
at Kernel->handle(object(Request)) in index.php line 54
并且 laravel 标准用户注册也不起作用。当登录时(两者都适用于 post)。
我错过了什么?
编辑:有趣的是,如果我使用提交按钮进行操作,它就会到达控制器。所以我发现问题出在控制器上:
$title=Input::post('title');
有'use Illuminate\Support\Facades\Input;'行
EDIT2:我猜 $title=Input::post('title');
是问题所在。我应该使用 $request->input('title');
但我不知道如何正确使用它,我得到
Target [App\Http\Requests\Request] is not instantiable.
如果我将 'Request $request' 参数添加到控制器功能,则会出错。
这里的问题是 Laravel 看不到您的 csrf 令牌。首先使用
在元描述中设置它
<meta name="csrf-token" content="{{ csrf_token() }}">
然后在你的JQuery中使用
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
这应该可以解决您的问题
在我的控制器中,我使用了“$title=Input::post('title');”而不是 '$request->input('title');'
我不得不提出请求 class,我提出了 App\Http\Requests\PostCreateRequest。
php artisan make:request PostCreateRequest
然后在控制器中
public function create(PostCreateRequest $request){
print $request->input('title');
}
有效:)
你可以使用这个:
https://laravel.io/forum/11-14-2014-disabling-the-csrf-middleware-in-laravel-5
在此,您可以使用新的 class 替换 VerifyCsrfToken
class.
来禁用给定路由的 csrf_token
所以这是我的第一个 laravel 项目,我无法找出问题所在。
我搜索了几个小时,但没有任何帮助。
{!! csrf_field() !!}
在我的表单中,发送了_token数据
路线:
Route::post('/posts/create', [
'middleware' => 'auth',
"as" => 'post-create',
"uses"=>'PostsController@create'
]);
Ajax:
$.ajax({
url:'{{route('post-create')}}',
type:'POST',
data:form.serialize()
});
Return 对于 ajax:
Remote Address:[::1]:80
Request URL:http://localhost/domain/public/posts/create
Request Method:POST
Status Code:500 Internal Server Error
TokenMismatchException in VerifyCsrfToken.php line 53:
in VerifyCsrfToken.php line 53
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 54
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 118
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 86
at Kernel->handle(object(Request)) in index.php line 54
并且 laravel 标准用户注册也不起作用。当登录时(两者都适用于 post)。
我错过了什么?
编辑:有趣的是,如果我使用提交按钮进行操作,它就会到达控制器。所以我发现问题出在控制器上:
$title=Input::post('title');
有'use Illuminate\Support\Facades\Input;'行
EDIT2:我猜 $title=Input::post('title');
是问题所在。我应该使用 $request->input('title');
但我不知道如何正确使用它,我得到
Target [App\Http\Requests\Request] is not instantiable.
如果我将 'Request $request' 参数添加到控制器功能,则会出错。
这里的问题是 Laravel 看不到您的 csrf 令牌。首先使用
在元描述中设置它<meta name="csrf-token" content="{{ csrf_token() }}">
然后在你的JQuery中使用
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
这应该可以解决您的问题
在我的控制器中,我使用了“$title=Input::post('title');”而不是 '$request->input('title');'
我不得不提出请求 class,我提出了 App\Http\Requests\PostCreateRequest。
php artisan make:request PostCreateRequest
然后在控制器中
public function create(PostCreateRequest $request){
print $request->input('title');
}
有效:)
你可以使用这个:
https://laravel.io/forum/11-14-2014-disabling-the-csrf-middleware-in-laravel-5
在此,您可以使用新的 class 替换 VerifyCsrfToken
class.