我尝试将字符串发送到控制器,该字符串是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() {
}
});
}
先感谢
答案 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已经在客户端解码。
因此,您可以在两个选项之间进行选择:
删除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'];
}