Laravel 5 App - AJAX 发布请求不接受令牌并引发 500 内部服务器错误
Posted
技术标签:
【中文标题】Laravel 5 App - AJAX 发布请求不接受令牌并引发 500 内部服务器错误【英文标题】:Laravel 5 App - AJAX Post Request not accepting the token and throwing a 500 internal server error 【发布时间】:2019-01-05 03:42:50 【问题描述】:所以,我在这 3 个小时的大部分时间里一直在寻找我的代码为什么不起作用。我不认为我的 ajax 请求正在检测我的 CSRF 令牌,即使我已经尝试了多种方法来实现它。刚接触 AJAX 请求,所以很容易。
目标: 向 /email/subscribe/ 提交 ajax POST 请求,并将用户提供的电子邮件地址添加到 email_subscribers 表中。
我已尝试将以下内容添加到我的代码中以显示令牌:
元标记和 Ajax 设置。
文件顶部
<meta name="csrf-token" content=" csrf_token() ">
在 jquery $(document).ready()
函数内的脚本标记中
// CSRF Ajax Token
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
隐藏的输入框
我还添加了一个隐藏的输入字段,并尝试将令牌插入到 ajax 帖子内的数据对象中。
<input type="hidden" id="token" value=" csrf_token() ">
javascript 标记
var token = $('#token').val();
// var token = $('meta[name="csrf-token"]').attr('content'); //Tried this way
$.ajax(
type: 'POST',
url: '/email/subscribe/',
dataType: 'json',
data:
email: email,
'_token': token,
// "_token": " csrf_token() ", //Tried this way as well
"_method": 'POST',
,
success: function (data)
// Check Server Side validation
if($.isEmptyObject(data.errors))
console.log(data['success']);
else
// Validation Failed Display Error Message
console.log(data.errors);
,
error: function (data)
console.log(data);
); // End Ajax POST function
这是我的 web.php 文件
// Email Routes
Route::prefix('email')->group(function()
// Create Post Route for subscribing
Route::post('/subscribe', 'EmailSubscriptionsController@subscribe')->name('email.subscribe');
);
和我的 EmailSubscriptionsController
class EmailSubscriptionsController extends Controller
// Store the Email into the database
public function subscribe(Request $request)
// Validate the request
$validator = Validator::make($request->all(), [
'email' => 'required|email',
]);
// If the validation fails
if($validator->fails())
return response()->json([
'errors' => $validator->errors()->all(),
]);
// New Section Object
$subscription = new EmailSubscription;
// Add Name into Section Object
$subscription->email = $request->email;
// Save the Section
$subscription->save();
// Return The Request
return response()->json([
'success' => 'Record has been saved successfully!'
]);
// End Subscribe
// End Controller
真正奇怪的是,当我在控制器内的subscribe()
函数中提交请求时,除了以下内容之外什么都没有:
// Return The Request
return response()->json([
'success' => 'Record has been saved successfully!'
]);
它不会返回错误......只是将成功消息传递到控制台。我不确定我做错了什么,因为我在我网站的另一部分有这个工作(一个 ajax 发布请求)。
【问题讨论】:
我意识到这是因为我的 EmailSubscription 模型发布到了错误的表格。谢谢你!把它变成一个答案,我会给你信任。 :P 【参考方案1】:首先在storage/logs/laravel.log
中查找异常堆栈跟踪。这应该可以更清楚地表明失败的原因。
网络检查器还允许您查看通常包含跟踪的响应。
500 个 ISE 的常见原因是通过 use
不正确地导入类。
【讨论】:
【参考方案2】:像这样使用它:-
headers:
'X-CSRF-TOKEN': ' csrf_token() '
【讨论】:
这不是问题的原因以上是关于Laravel 5 App - AJAX 发布请求不接受令牌并引发 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.7 Ajax 发布请求返回 419 状态码
从ajax请求下载laravel pdf文件(laravel 5)