'Why do I have invalid argument supply for foreach in Laravel for json response? [duplicate]
I am working on Razorpay integration and after succesful payment when I try to save the details to the database I get an error. I am sending the details through AJAX and in controller when I try to use foreach
and look in console I always get the error invalid argument supplied for foreach statement.
this is the script after successful transaction
<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>
the controller function is
public function dopayment(Request $request) {
$input = $request->all();
$product = $request->product;
foreach ($product as $single) {
# code...
print_r($single->name);
}
print_r($product);
exit;
}
Solution 1:[1]
You may decode product string before loop through it
//...
$product = json_decode($request->product, true);
//...
Solution 2:[2]
Please Json Decode before foreach loop
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;
}
Solution 3:[3]
The error occurs because $product
returns a single value instead of an array; a check will work in this case.
if (is_array($product ) || is_object($product ))
{
foreach($product as $arrayItems){
// Perform x.
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Foued MOUSSI |
Solution 2 | Paras Raiyani |
Solution 3 | Karl Hill |