我尝试将字符串发送到 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 已经在客户端解码了。
因此,您可以在两个选项之间进行选择:
删除
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']; }
关于javascript - 当来自 ajax post 的 json_decode 字符串出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099778/