【发布时间】:2020-03-02 21:32:05
【问题描述】:
我有一个简单的表单,其中包含一个用于在弹出模式中打开另一个表单的按钮,表单看起来像这样
现在您可以在上面看到预出价输入加号按钮,当用户单击加号按钮时,它会打开包含如下表单的模式。
现在我想按以下顺序提交表格
First submit: base form (norma way)
Second submit: form inside a pop up (via ajax)
这是我在页面控制器中提交表单的商店功能
public function store(Request $request)
{
$page = Page::create([
'title' => $request->get('title'),
'articles' => $request->get('articles'),
'status' => $request->get('status'),
]);
// dd($request);
$page->save();
$bidder = Bidder::create('page_id' -> $page->id);
// save bidders informtion to the database using ajax
if($request->ajax())
{
$rules = array(
'params_name.*' => 'required',
'params_value.*' => 'required',
'bidders_name.*' => 'required',
);
$error = Validator::make($request->all(), $rules);
if($error->fails())
{
return response()->json([
'error' => $error->errors()->all()
]);
}
$params_name = $request->params_name;
$params_value =$request->params_value;
$bidders_name =$request->bidders_name;
for($count = 0; $count < count($params_name); $count++)
{
$data = array(
'params_name' => $params_name[$count],
'params_value' => $params_value[$count],
'bidders_name' => $bidders_name[$count],
);
$insert_data[] = $data;
}
bidder_parameters::insert($insert_data);
return response()->json([
'success' => 'Data Added successfully.'
]);
}
return redirect("/pages")->with("sucess", "data saved");
}
这里是用于在弹出窗口中提交表单的 ajax
$("#paramsForms").on('submit', function(e) {
e.preventDefault();
$.ajax({
url: '/pages',
type: "POST",
data: $(this).serialize(),
dataType: 'json',
beforeSend:function() {
$("#save").attr('disabled', 'disabled');
},
success:function (data) {
console.log(data);
alert('Data successfull saved');
},
error:function (error) {
console.log(error)
console.log('Data not saved');
}
})
})
现在点击提交时出现以下错误
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null (SQL: insert into `pages` (`title`, `articles`, `status`, `updated_at`, `created_at`) values (?, ?, ?, 2019-11-06 11:29:31, 2019-11-06 11:29:31))"
注意:在 store 函数中检查两个表单的 dd($request),我得到以下
+request: ParameterBag {#44
#parameters: array:4 [
"_token" => "Wgozk9jnyUnJkL35vPhso9sUr7lbMD8cSgMVuN2s"
"bidders_name" => array:1 [
0 => "Biden"
]
"params_name" => array:1 [
0 => "democratic"
]
"params_value" => array:1 [
0 => "10"
]
]
}
注意:问题是当我在弹出模式上单击提交时,它首先尝试发送基本表单
我需要改变什么才能得到我想要的?
【问题讨论】:
-
决定是否要将
title作为必填字段 -
您的请求似乎没有发送标题,而您的插入需要它。您应该在尝试插入之前考虑验证请求
-
你确定是 Laravel 本身有问题吗?您尝试过哪些措施来进一步缩小问题范围?
-
问题是当我单击弹出模式上的提交按钮时,它会尝试发送基本表单,这就是我收到错误的原因,现在我想要发送这些表单的最佳方式@NicoHaase
标签: javascript php mysql ajax laravel