您好,友好的程序员!
我现在处于这种情况。我正在使用Laravel 7,我的视图有2个按钮。 “开始”和“停止”在单击“开始”时,我想在MySQL表中创建一行,其中包含当前登录用户的user_id和用户按下“开始”的时间戳。您可能已经知道下一步是什么:单击“停止”时,我想创建一个包含user_id和用户按下“停止”的时间戳的行]
我只有相应的PHP函数的一条路由:Route::post('/home', 'HomeController@findAction')->name('home.find');
该函数如下所示:
public function findAction(\Illuminate\Http\Request $request)
{
if ($request->has('start-btn'))
{
return $this->dispatch(new \App\Jobs\WorkStart($request));
}
else if ($request->has('stop-btn'))
{
return $this->dispatch(new \App\Jobs\WorkStop($request));
}
else if ($request->has('pause-btn'))
{
return $this->dispatch(new \App\Jobs\WorkPause($request));
}
return 'no action found';
}
其想法是,取决于单击哪个按钮,将执行特定作业。这些工作做得很好。我使用一种表单尝试了同样的事情,该表单导致创建了我想要的行。缺点是,每当我单击一个按钮时,整个站点都变成白色,因此我必须单击返回才能继续。 (我猜是因为PHP发布的性质?)
乔布斯看起来像这样:
class WorkStart implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try
{
$id = DB::table('times')->insertGetId(
['user_id' => 1, 'clocked_in' => now()]
);
}
catch(Exception $e)
{
echo "crap";
}
}
}
以及我视图中的按钮:
<div id="start">
@csrf
<button
class="btn btn-primary btn-lg"
type="button"
id="start-btn"
name="start-btn"
value="start"
>start</button>
</div>
[对不起,如果这是一个我自己能解决的常见问题,但是我是PHP尤其是Laravel 7的新手,而且我以前从未使用过AJAX,也找不到类似问题的解决方案。持续数天。
所以我的问题是:我可以使用AJAX为这些按钮提供所需的功能,而无需重新加载页面,因此没有“表单”,也没有向JQuery函数提供数据,如下所示:
jQuery(document).ready(function(){ jQuery('#start-btn').click(function(e){ e.preventDefault(); console.log("flag"); $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); jQuery.ajax({ type: 'post', url: "/home", success: function(result){ alert("Welcome!"); console.log("flag2"); }}); });
感谢您的帮助!
您好,友好的程序员!我现在处于这种情况。我正在使用Laravel 7,我的视图有2个按钮。 “开始”和“停止”单击“开始”后,我想在我的MySQL表中创建一行...
如果要使用ajax提交不带<form>
标记的表单,请尝试此。