Я пытаюсь отправить строку на контроллер, строка имеет формат json, при отправке на контроллер я получаю сообщение об ошибке и не могу декодировать свою строку json в этом контроллере. Я пытаюсь сначала закодировать в своем контроллере, но все равно получаю ошибку. И ошибка
"json_decode() expects parameter 1 to be string, array given", exception: "ErrorException",
здесь, в моей строке json
"{ "data" :
[{
"id": "TNI01",
"jenis_bayar": "TUNAI",
"no_kartu": "kosong",
"nominal": "10000",
"seq": "1"
} ,
{
"id": "DEB01",
"jenis_bayar": "DEBIT BCA",
"no_kartu": "786382432432",
"nominal": "20000",
"seq": "2"
}]
}"
здесь контроллер
public function ArrayPostToTablePembayaran(Request $request)
{
$data = json_decode($request->datajson, true);
foreach ($data->data as $datas)
{
$id = $datas->id;
$jenisbayar = $datas->jenis_bayar;
$nokartu = "";
if ($datas->no_kartu == "kosong")
{
$nokartu = "";
}
$nominal = $datas->nominal;
$seq = $data->seq;
$this->PosToTablePembayaran1($id , $jenisbayar , $nokartu , $nominal , $seq);
}
}
и здесь скрипт ajax для разбора строки json на контроллер
function PembayaranKeDatabase1(arraystring)
{
$.ajax(
{
type : "POST",
url : "{{ url('/trx_bayar') }}",
data : { datajson : JSON.parse(arraydata) } ,
dataType: "json",
success: function(data){
},
error: function() {
}
});
}
спасибо перед
Итак, я думаю, передать объект json контроллеру? если строка уже должна быть объектом массива, как это сделать в foreach?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Основная проблема в вашем коде, который вы пытаетесь декодировать json дважды: в клиентском js-коде и на сервере.
Давайте проверим, что вы делаете:
Я полагаю, функция JS PembayaranKeDatabase1(arraystring) имеет аргумент типа нить. Я также предполагаю, что arraystring — это JSON-строка. Итак, вы декодировать JSON-строку для объекта с
JSON.parse(arraydata)
// btw shouldn't it be
//JSON.parse(arraystring)
Итак, здесь вы отправляете на сервер простой объект, нет json.
Затем на сервере вы снова пытаетесь выполнить декодировать. Но вы получаете массив в $request->datajson, так как json уже декодирован на стороне клиента.
Итак, вы можете выбрать один из двух вариантов:
Удалить JSON.parse:
data : { datajson : arraydata },
и используйте json_decode на сервере.
Удалить json_decode($request->datajson, true) на сервере. Перебирайте ваши данные как
// as $request->datajson is an array
foreach ($request->datajson['data'] as $datas) {
// use [] notation as you work with array, not object
echo $datas['id'];
}
если я выберу первый вариант, будет ли сценарий foreach, который я использовал раньше, правильным?
Правильно, но опция true в json_decode декодирует данные в множество, и вам понадобится нотация [] вместо ->. Если вам все еще нужны объект и -> - удалите второй аргумент json_decode.
Я думаю, что если я использую формат json, я должен декодировать в контроллере/сервере, но это уже будет формат массива, спасибо,
Итак, что непонятно? Вы передаете множество вместо строки.
$request->datajsonуже является массивом, и вам не нужно его декодировать.