Javascript json_从ajax post解码字符串时出错
我尝试将字符串发送到控制器,字符串是json格式的,当发送到控制器时,我得到错误,无法在该控制器中解码我的json字符串。我尝试在我的控制器中首先编码,但仍然得到错误。错误是 “json_decode()要求参数1为字符串,数组给定”, 异常:“ErrorException” 这里是我的json字符串Javascript json_从ajax post解码字符串时出错,javascript,php,json,laravel,Javascript,Php,Json,Laravel,我尝试将字符串发送到控制器,字符串是json格式的,当发送到控制器时,我得到错误,无法在该控制器中解码我的json字符串。我尝试在我的控制器中首先编码,但仍然得到错误。错误是 “json_decode()要求参数1为字符串,数组给定”, 异常:“ErrorException” 这里是我的json字符串 "{ "data" : [{ "id": "TNI01", "jenis_bayar": "TUNAI", "no_kartu": "kosong", "nominal": "10000",
"{ "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);
}
}
function PembayaranKeDatabase1(arraystring)
{
$.ajax(
{
type : "POST",
url : "{{ url('/trx_bayar') }}",
data : { datajson : JSON.parse(arraydata) } ,
dataType: "json",
success: function(data){
},
error: function() {
}
});
}
这里是用于将json字符串解析到控制器的ajax脚本
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);
}
}
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)
有一个字符串类型的参数。我还假设arraysting
是一个JSON字符串。因此,您可以使用将JSON字符串解码为对象
JSON.parse(arraydata)
// btw shouldn't it be
//JSON.parse(arraystring)
所以,这里您将一些普通对象发送到服务器,而不是json
接下来,在服务器上再次尝试解码。但是您会在$request->datajson
中收到一个数组,因为json已经在客户端解码了
因此,您可以在两个选项中进行选择:
JSON.parse
:
data : { datajson : arraydata },
json\u decode
json\u解码($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'];
}
那么,什么是不清楚的呢?您传递的是数组而不是字符串
$request->datajson
已经是数组了,您不需要解码它。所以,我想把json对象传递给控制器?如果字符串已经是数组对象,如何在foreach中实现它?如果我选择第一个选项,我之前使用的foreach脚本是否正确?正确,但是json\u decode
中的选项true
将数据解码到数组中,您需要[]
符号而不是->
。如果您仍然需要对象和->
-删除json\u decode
的第二个参数。我认为如果使用json格式,必须在控制器/服务器中解码,但这已经是数组格式,谢谢,