【问题标题】:Why do I have invalid argument supply for foreach in Laravel for json response? [duplicate]为什么我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?
【发布时间】:2020-05-21 07:44:36
【问题描述】:

我正在进行 Razorpay 集成,在成功付款后,当我尝试将详细信息保存到数据库时出现错误。当我尝试使用 foreach 并在控制台中查看时,我通过 AJAX 和控制器发送详细信息,我总是收到为 foreach 语句提供的错误无效参数。

这是交易成功后的脚本

<script>

    function demoSuccessHandler(transaction) {
        // You can write success code here. If you want to store some data in database.
        $("#paymentDetail").removeAttr('style');
        $('#paymentID').text(transaction.razorpay_payment_id);
        var paymentDate = new Date();
        $('#paymentDate').text(
                padStart(paymentDate.getDate()) + '.' + padStart(paymentDate.getMonth() + 1) + '.' + paymentDate.getFullYear() + ' ' + padStart(paymentDate.getHours()) + ':' + padStart(paymentDate.getMinutes())
                );

        $.ajax({
            method: 'post',
            url: "{!!route('dopayment')!!}",
            dataType:"json",
            data: {
                "_token": "{{ csrf_token() }}",
                "product": "{{ json_encode($product)}}",
                "Company": "{{ $company}}",
                "Address": "{{$address}}",
                "Contact": "{{$contact}}",
                "razorpay_payment_id": transaction.razorpay_payment_id
            },
            complete: function (r) {
                console.log('complete');
                console.log(r);
            }
        })
    }
</script>
<script>
    var options = {
        key: "{{ env('RAZORPAY_KEY') }}",
        amount: '{{ $subtotal}}',
        name: 'AMCOR RAZORPAY',
        description: 'AMCOR INTERNATIONAL',
        image: 'https://i.imgur.com/n5tjHFD.png',
        handler: demoSuccessHandler
    }
</script>

控制器功能是

 public function dopayment(Request $request) {

            $input = $request->all();

            $product = $request->product;


            foreach ($product as $single) {
                # code...

                print_r($single->name);
            }

            print_r($product);
            exit;
        }

【问题讨论】:

  • 您正在以字符串形式为该参数发送 JSON,因此您需要再次解码它,然后才能使用它...
  • 请打印 $input = $request->all(); print_r($输入);并输出
  • 数组\n(\n [_token] => b4ta6V2znRmJwTRg8eBgkZnqtyKfF6Gbqtnt2nKB\n [产品] => ["{"id":"9","name":"R 007-4ft ","price":40,"quantity":"202","attributes":{"image":"glassfilms\\/December2019\\/uiwv4WDsYWjmtVxcSuES.jpg","crm":"Pro181"},"条件":[]}","{"id":"7","name":"Frosted 007-4ft","price":40,"quantity":967,"attributes":{"image":" glassfilms\\/December2019\\/ZJgWUNaYrPnvsoRfuagv.jpg","crm":"PRO105"},"conditions":[]}"]\n [公司] => 公司:\n [地址] => 公司:地标:\n [联系方式] => \n [razorpay_payment_id] => pay_ED3rIld3uOhRfE\n)\n
  • 我认为发送到控制器的产品格式无效,因为我通过 json 验证器检查结果是无效的 JSON 格式。请帮助我更改格式,因为当我从 $products 中删除 json_encode 时,我得到 htmlspecialchars() 期望参数 1 是字符串,给定数组
  • 你能 var_dump $product 吗?

标签: php jquery ajax laravel laravel-5


【解决方案1】:

您可以在循环之前解码产品字符串

//...
$product  = json_decode($request->product, true);
//...

【讨论】:

    【解决方案2】:

    请在 foreach 循环之前进行 Json 解码

     public function dopayment(Request $request) {
    
                $input = $request->all();
    
                $product = json_decode($request->product);
    
    
                foreach ($product as $single) {
                    # code...
    
                    print_r($single->name);
                }
    
               print_r($product);
                exit;
            }
    

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2022-01-27
      • 2018-02-26
      • 2017-11-26
      相关资源
      最近更新 更多