Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript json_从ajax post解码字符串时出错_Javascript_Php_Json_Laravel - Fatal编程技术网

Javascript json_从ajax post解码字符串时出错

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",

我尝试将字符串发送到控制器,字符串是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); 
       }
    }
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格式,必须在控制器/服务器中解码,但这已经是数组格式,谢谢,