如何将JavaScript的result值作为amount参数传递给Laravel函数
解决方案
你漏了两个核心步骤:前端发请求时未携带用户输入的金额参数,后端未从请求中读取该参数,按以下代码修改即可。
1. 调整前端JS逻辑
SweetAlert 弹窗的用户输入值存放在result.value字段,发axios请求时把该值放到POST请求体中传给后端,额外加个简单的输入校验避免非法值提交:
function makeOffer(nftid) { swal({ title: "Do you want to make offer?", text: "Enter amount", input: 'text', type: 'warning', showCancelButton: true, showConfirmButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', inputValidator: (value) => { if (!value || isNaN(Number(value)) || Number(value) <= 0) { return '请输入有效的出价金额' } } }).then((result) => { if (result.value) { axios.post(`/myaccount/makeoffer/${nftid}`, { amount: result.value }).then(response => { window.location.reload(); }).catch(err => { swal("出价失败", "请稍后重试", "error"); }); } }); }
如果你用的是v1版本的SweetAlert,输入值直接存在result变量上,把
amount: result.value改成amount: result即可。
2. 调整后端Laravel控制器逻辑
在控制器中通过$request实例读取前端传过来的amount参数,赋值给模型字段,建议加参数校验过滤非法请求:
public function makeOffer($id, Request $request){ // 参数校验 $request->validate([ 'amount' => 'required|numeric|min:0.01' ]); $nft = NFT::findOrFail($id); if($nft->status == 'pending') { $nft_auction = new NftAuctions(); $nft_auction->nft_id = $nft->id; $nft_auction->owner_id = $nft->user->id; $nft_auction->buyer_id = Auth::id(); $nft_auction->amount = $request->input('amount'); $nft_auction->status = 'pending'; $nft_auction->save(); return back(); } abort(404); }
补充说明
- 确认路由
/myaccount/makeoffer/{id}为POST请求类型,如果你没有修改Laravel默认的axios配置,框架会自动携带CSRF令牌,不需要额外处理请求头。 - 如果你的amount字段在数据库里是整数类型(比如存分为单位),可以在赋值前做一次单位转换,比如
$nft_auction->amount = (int)($request->input('amount') * 100),避免浮点数精度问题。
内容的提问来源于stack exchange,提问作者user18203346
相关产品推荐
相关产品推荐

