是否可以仅使用 csrf 字段而不是令牌来使用 ajax 请求插入数据?
Posted
技术标签:
【中文标题】是否可以仅使用 csrf 字段而不是令牌来使用 ajax 请求插入数据?【英文标题】:Is it possible to insert data with ajax request by only using the csrf field instead of token? 【发布时间】:2018-09-13 01:32:57 【问题描述】:我正在尝试使用 CSRF 字段插入数据。我真的没有 CSRF 令牌的想法。 (新的 laravel)。我在 /classwork/insert 中遇到未知状态错误。
//This is my ajax function: I really can't understand what is wrong with the code.
是否可以仅使用 csrf-field 进行 ajax 调用
function insertData(e)
e.preventDefault();
var data = $(this).serialize();
$.ajax(
url: '/classwork/insert',
method: 'post',
data : 'data',
success:function(data)
console.log(data);
);
//This is my controller and Route:
public function insertTask(Request $request)
$task = new Task;
$task->task = $request->task;
$task->save();
//this is my route
Route::post('/classwork/insert', 'TaskController@insertTask');
【问题讨论】:
嗨@rakesh shrestha,当您通过 POST 方法强制通过 CSRF 令牌时,像这样的标头:'X-CSRF-TOKEN': $('meta[name="csrf-token"]')。 attr('内容') 谢谢!但我还有其他问题..你能帮忙吗?消息:“SQLSTATE [23000]:完整性约束违规:1048 列'任务'不能为空(SQL:插入tasks
(task
,updated_at
,created_at
)值(,2018-04-03 16 :49:42, 2018-04-03 16:49:42))"
【参考方案1】:
试试这个方法
在ajax调用之前添加这个
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
【讨论】:
现在我得到一个类似这样的错误:消息:“SQLSTATE [23000]:完整性约束违规:1048列'任务'不能为空(SQL:插入tasks
(task
, updated_at
, created_at
) 值 (, 2018-04-03 16:49:42, 2018-04-03 16:49:42))"
在您的代码中,您没有发送任何数据,这就是将空值插入数据库表的原因。所以错误显示。尝试在ajax函数的data属性中发送数据
我已经序列化了数据.. 它不作为 json 传递? ..我现在如何传递数据.. afsal
尝试在 ajax 函数 dataType: 'json' 中使用这个【参考方案2】:
请始终在主刀片页面中添加此元标记
<meta name="csrf-token" content=" csrf_token() ">
而不是旧的 scholl jquery ajax.. 只需使用 Axios。简单而且很容易。它已经检测到 csrd-token 元标记。所以不需要在表单或标题中做
改变这个
$.ajax(
url: '/classwork/insert',
method: 'post',
data : 'data',
success:function(data)
console.log(data);
);
到这里
axios.post('/classwork/insert', data)
.then(function(response)
console.log(response);
);
【讨论】:
感谢您的帮助!! ..但现在我遇到另一个错误..你能再次帮忙@zeroOne ..消息:“SQLSTATE [23000]:完整性约束违规:1048列'任务'不能为空(SQL:插入@ 987654324@(task
, updated_at
, created_at
) 值 (, 2018-04-03 17:00:48, 2018-04-03 17:00:48))"
表示'task'值不能为空。请检查'task'变量是否有值
以及为什么axios没有定义先生【参考方案3】:
创建一个通用的 ajaxRequest 函数。将此添加到元
<meta name="csrf-token" content=" csrf_token() ">
然后在你的全局 ajax 函数中执行此操作;
public function ajaxRequest(options)
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
$.ajax(
url: option.url,
method: option.method,
data : option.data,
success:function(data)
console.log(data);
);
【讨论】:
以上是关于是否可以仅使用 csrf 字段而不是令牌来使用 ajax 请求插入数据?的主要内容,如果未能解决你的问题,请参考以下文章