我的视图中有几个字段集,每个字段集都有一个
submit
按钮
<button class="next action-button" type="submit" name="next" data-gotostep="3">(Save & Next)</button>
按钮调用此路线
Route::get('worksteps/store/{subprocess_id}', 'WorkstepsController@store')->name('worksteps.store');
存储功能
public function store(StoreWorkstepRequest $request)
{
$created_by_id = Auth::user()->id;
$value = $request->target_value;
$unit = $request->unit;
$subprocess_id = $request->subprocess_id;
$step_position = $request->subprocess_step_position;
$step_system_id = $request->subprocess_system_id;
$registry_date = Carbon::now()->toDateTimeString();
DB::table('subprocess_registry')->updateOrInsert(
['subprocess_id' => $step_system_id],
['value' => $value,
'unit' => $unit,
'step_position' => $step_position,
'created_at' => $registry_date,
'created_by_id' => $created_by_id,
]
);
return back();
}
一切都按预期工作,除了重定向到空白页的
return back();
行
我只需要调用 store 方法而不返回任何内容,也不对视图进行任何更改。
尝试过
return back();
return redirect()->back();
return redirect()->previous();
他们都重定向回空白页面,还尝试完全删除 return 语句。 如何在后台调用
store
函数而不影响 view
?
您可以使用 AJAX 来实现:
首先添加jquery:
将按钮类型更改为按钮,这样它就不会尝试以传统方式提交表单:
<button class="next action-button" type="button" name="next" data-gotostep="3">(Save & Next)</button>
AJAX 提交:
$(document).ready(function() {
$('.next.action-button').on('click', function() {
var subprocess_id = $(this).data('gotostep'); // Retrieve subprocess_id from the button data attribute
$.ajax({
url: '/worksteps/store/' + subprocess_id,
type: 'GET',
data: {
target_value: $('input[name="target_value"]').val(),
unit: $('input[name="unit"]').val(),
subprocess_id: $('input[name="subprocess_id"]').val(),
subprocess_step_position: $('input[name="subprocess_step_position"]').val(),
subprocess_system_id: $('input[name="subprocess_system_id"]').val(),
},
success: function(response) {
console.log(response);
},
error: function(xhr, status, error) {
console.error(error);
}
});
});
});
在你的控制器中你应该返回 JSON:
return response()->json(['status' => 'success', 'message' => 'Data saved successfully']);