javascript - 当来自 ajax post 的 json_decode 字符串出现错误

标签 javascript php json laravel

我尝试将字符串发送到 Controller ,该字符串是 json 格式,当发送到 Controller 时,出现错误并且无法在该 Controller 中解码我的 json 字符串。我尝试先在我的 Controller 中进行编码,但仍然出现错误。错误是

"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"
}]
}"

这里是 Controller

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 字符串解析为 Controller 的 ajax 脚本

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

                      },
                      error: function() {

                      }
                  });
            }

先谢谢

最佳答案

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

关于javascript - 当来自 ajax post 的 json_decode 字符串出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099778/

相关文章:

javascript - Kendo UI 中 ListView 的日期过滤器

php - 无论行是否包含 SELECT 字段,获取查询结果

php - 取消设置 mysql 结果

javascript - 奇怪的Put Json表单数据(Jquery Ajax)

json - 选择特定字段并从 jsonb 字段中的数组获取结果

javascript - 在 js 中创建一组自定义的已定义链接方法

javascript - 从数组中删除 JSON 对象会创建 "undefined"个对象

json - r 中出现意外的字符 json 错误

javascript - 检查 Node.js 中的值是否可以序列化为 JSON

php - 如何使用 phpfastcache?