получить ошибку, когда строка json_decode из сообщения ajax - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь отправить строку в контроллер, строка в формате json, при отправке в контроллер я получаю сообщение об ошибке и не могу декодировать мою строку json в этом контроллере.Я пытаюсь сначала кодировать в моем контроллере, но все равно получаю ошибку.И ошибка:

"json_decode () ожидает, что параметр 1 будет строкой, задан массив", исключение: "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() {

                      }
                  });
            }

спасибо, прежде чем

1 Ответ

1 голос
/ 12 мая 2019

Основная проблема в вашем коде, что вы пытаетесь декодировать json дважды : в коде js клиента и на сервере.

Давайте проверим, что вы делаете:

Функция JS PembayaranKeDatabase1(arraystring) имеет аргумент типа string , я полагаю. Я также предполагаю, что arraystring является JSON-строкой. Итак, вы декодируете JSON-строку для объекта с помощью

JSON.parse(arraydata)  
// btw shouldn't it be 
//JSON.parse(arraystring)

Итак, вы отправляете на сервер некий простой объект , , а не JSON.

Далее на сервере вы пытаетесь снова декодировать . Но вы получаете массив в $request->datajson, так как json уже декодирован на стороне клиента.

Итак, вы можете выбрать один из двух вариантов:

  1. Удалить JSON.parse:

    data    : { datajson : arraydata },
    

и используйте json_decode на сервере.

  1. Удалить 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'];
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...