为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?

Posted

技术标签:

【中文标题】为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?【英文标题】: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 吗? 【参考方案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;
        

【讨论】:

以上是关于为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?的主要内容,如果未能解决你的问题,请参考以下文章

使用 vue js 时在 laravel 中为 foreach 提供的参数无效

我们如何在 laravel php 刀片模板中为 foreach 循环定义循环变量

为啥 Laravel 跳过第二个 Foreach()

当我使用 ajax 发布请求时,为啥在我的 live laravel 项目中显示 404 和 405

为啥嵌套循环在 laravel 中不起作用

为啥我在使用 foreach 时会收到 ***Error?