从Ajax帖子获取json_decode字符串时出现错误

时间:2019-05-12 13:35:59

标签: javascript php json laravel

我尝试将字符串发送到控制器,该字符串是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); 
       }
    }

,这里是将json字符串解析为控制器的ajax脚本

function PembayaranKeDatabase1(arraystring)
            {
              $.ajax(
                  {
                      type    : "POST",
                      url     : "{{ url('/trx_bayar') }}",
                      data    : { datajson : JSON.parse(arraydata) } ,
                      dataType: "json",
                      success: function(data){

                      },
                      error: function() {

                      }
                  });
            }

先感谢

1 个答案:

答案 0 :(得分:1)

您尝试将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'];
    }