为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?
Posted
技术标签:
【中文标题】为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?【英文标题】:Why do I have invalid argument supply for foreach in Laravel for json response? [duplicate]为什么我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应? 【发布时间】:2020-05-21 07:44:36 【问题描述】:我正在进行 Razorpay 集成,在成功付款后,当我尝试将详细信息保存到数据库时出现错误。当我尝试使用 foreach
并在控制台中查看时,我通过 AJAX 和控制器发送详细信息,我总是收到为 foreach 语句提供的错误无效参数。
这是交易成功后的脚本
<script>
function demoSuccessHandler(transaction)
// You can write success code here. If you want to store some data in database.
$("#paymentDetail").removeAttr('style');
$('#paymentID').text(transaction.razorpay_payment_id);
var paymentDate = new Date();
$('#paymentDate').text(
padStart(paymentDate.getDate()) + '.' + padStart(paymentDate.getMonth() + 1) + '.' + paymentDate.getFullYear() + ' ' + padStart(paymentDate.getHours()) + ':' + padStart(paymentDate.getMinutes())
);
$.ajax(
method: 'post',
url: "!!route('dopayment')!!",
dataType:"json",
data:
"_token": " csrf_token() ",
"product": " json_encode($product)",
"Company": " $company",
"Address": "$address",
"Contact": "$contact",
"razorpay_payment_id": transaction.razorpay_payment_id
,
complete: function (r)
console.log('complete');
console.log(r);
)
</script>
<script>
var options =
key: " env('RAZORPAY_KEY') ",
amount: ' $subtotal',
name: 'AMCOR RAZORPAY',
description: 'AMCOR INTERNATIONAL',
image: 'https://i.imgur.com/n5tjHFD.png',
handler: demoSuccessHandler
</script>
控制器功能是
public function dopayment(Request $request)
$input = $request->all();
$product = $request->product;
foreach ($product as $single)
# code...
print_r($single->name);
print_r($product);
exit;
【问题讨论】:
您正在以字符串形式为该参数发送 JSON,因此您需要再次解码它,然后才能使用它... 请打印 $input = $request->all(); print_r($输入);并输出数组\n(\n [_token] => b4ta6V2znRmJwTRg8eBgkZnqtyKfF6Gbqtnt2nKB\n [产品] => [""id":"9","name":"R 007-4ft ","price":40,"quantity":"202","attributes":"image":"glassfilms\\/December2019\\/uiwv4WDsYWjmtVxcSuES.jpg","crm":"Pro181","条件":[]",""id":"7","name":"Frosted 007-4ft","price":40,"quantity":967,"attributes":"image":" glassfilms\\/December2019\\/ZJgWUNaYrPnvsoRfuagv.jpg","crm":"PRO105","conditions":[]"]\n [公司] => 公司:\n [地址] => 公司:地标:\n [联系方式] => \n [razorpay_payment_id] => pay_ED3rIld3uOhRfE\n)\n我认为发送到控制器的产品格式无效,因为我通过 json 验证器检查结果是无效的 JSON 格式。请帮助我更改格式,因为当我从 $products 中删除 json_encode 时,我得到 htmlspecialchars() 期望参数 1 是字符串,给定数组 你能 var_dump $product 吗? 【参考方案1】:
您可以在循环之前解码产品字符串
//...
$product = json_decode($request->product, true);
//...
【讨论】:
【参考方案2】:请在 foreach 循环之前进行 Json 解码
public function dopayment(Request $request)
$input = $request->all();
$product = json_decode($request->product);
foreach ($product as $single)
# code...
print_r($single->name);
print_r($product);
exit;
【讨论】:
以上是关于为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?的主要内容,如果未能解决你的问题,请参考以下文章
使用 vue js 时在 laravel 中为 foreach 提供的参数无效
我们如何在 laravel php 刀片模板中为 foreach 循环定义循环变量