当前位置: 首页 > 知识库问答 >
问题:

将刀片数组作为json字符串从laravel刀片获取到ajax post请求

郁高韵
2023-03-14

我对在Laravel刀片和razorpay集成中实现Ajax非常陌生。我已通过post方法将产品详细信息从我的控制器功能账单发送到付款页面。成功付款后,我想将产品详细信息发送到functiondopayment,并将订单详细信息保存到后端。当我尝试发送详细信息时,要么我得到$products的错误,要么我得到htmlspecialchars()期望参数1是字符串,要么我直接在ajax数据中放入$product时给出的数组,要么当我使用json\u encode($product)编码$product时,在Laravel中为foreach提供的json响应参数无效并将其发送到ajax数据。

控制器功能清单如下所示:

public function bill(Request $request){

            $input = $request->all();

            return view('cart/checkout')->with('product' , $request->product)
                              ->with('subtotal' , round($request->subtotal));
        }

掺杂函数是

public function dopayment(Request $request) {
            //Input items of form
            $input = $request->all();

            $product = $request->product;

            //if i use foreach here i get the error invalid argument suppy for foreach

            print_r($product);
            exit;
        }

查看页面是

@extends('app.app')

@section('content')

<div id="main-content">

    <div class="container clear">
        <div class="panel-body" style="border: 1px solid #ddd;">
            <form id="rzp-footer-form" action="{!!route('dopayment')!!}" method="POST" style="width: 100%; text-align: center" >
                @csrf

                <a href="#">
                    <img src="{{asset('/img/amcor.JPG')}}" />
                </a>    
                <br/>
                <p><br/>Price: {{ $subtotal }} INR </p>
                <input type="hidden" name="amount" id="amount" value="{{ $subtotal }}"/>
                <div class="pay">
                    <button class="razorpay-payment-button btn filled small" id="paybtn" type="button">Pay with Razorpay</button>                        
                </div>
            </form>
            <br/><br/>
            <div id="paymentDetail" style="display: none">
                <center>

                    @foreach($product as $input => $details)
                    <input type="text" id="name" name="name" value="{{ json_decode($details)->name}}">
                    @endforeach
                    <div>paymentID: <span id="paymentID" name="txn_id"></span></div>
                    <div>paymentDate: <span id="paymentDate" name="date"></span></div>

                </center>
            </div>
        </div>

    </div>
</div>

<script>
    $('#rzp-footer-form').submit(function (e) {
        var button = $(this).find('button');
        var parent = $(this);
        button.attr('disabled', 'true').html('Please Wait...');
        $.ajax({
            method: 'get',
            url: this.action,
            data: $(this).serialize(),
            complete: function (r) {
                console.log('complete');
                console.log(r);
            }
        })
        return false;
    })
</script>

<script>
    function padStart(str) {
        return ('0' + str).slice(-2)
    }

    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($productcode,JSON_FORCE_OBJECT) }}",
                "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}}00',
        name: 'AMCOR RAZORPAY',
        description: 'AMCOR INTERNATIONAL',
        image: 'https://i.imgur.com/n5tjHFD.png',
        handler: demoSuccessHandler
    }
</script>
<script>
    window.r = new Razorpay(options);
    document.getElementById('paybtn').onclick = function () {
        r.open()
    }
</script>

@endsection

路由功能是

Route::post('bill', 'RazorpayController@bill')->name('pay');
Route::post('dopayment', 'RazorpayController@dopayment')->name('dopayment');

共有1个答案

班承恩
2023-03-14

Ajax将自动将数据转换为JSON(有关详细信息,请查看您的控制台)

因此,当您在dopayment()接收时,您必须将JSON数据解码到一个数组中,以便可以在其中循环:$product=JSON\u decode($request-

 类似资料:
  • Laravel中的刀片模板是否有类似Smarty的截断修改器? 我知道我可以在模板中写出实际的php,但我正在寻找更好的东西来编写(我们不要讨论整个php是一个模板引擎)。 例如,我在寻找这样的东西: 我知道我可以通过作曲家使用像树枝这样的东西,但我希望Laravel本身具有内置功能。 如果没有,可以像Smarty提供的那样创建自己的可重用修饰符。我喜欢Blade不会过度使用所有语法,但我认为tr

  • 我在建一个拉威尔的网站。我希望提交的表单数据运行查询,并将结果插入表格式。我正在使用oracle DB,并已将其连接到Laravel。另外,我已经创建了表单,查询结果正确。我不能做的是将结果成功地传递到表中。 我的文件如下: > Routes.php(或web.php较新的laravel版本): 搜索。刀身php(带有post方法的表单) 我的控制器(NewController.php)运行查询。

  • 需要在刀片laravel-value输入中输入变量php,变量i to用于添加i的值,在值=“{$TAREFA-&>TETAPA.i} 为此:value=“{Tarefa->Tetapa1}value=”{Tarefa->Tetapa2}…至10

  • 在我的模板中,我有以下内容: 在这篇文章中,我想突出显示字符串中的所有单词 所以我想我创建了一个新的刀片指令: 错误:缺少参数2 发现指令不包含2个参数。我尝试了所有我能找到的解决办法,但没有一个奏效。它们总是以普通字符串的形式返回参数,甚至不传递实际值。 我尝试添加一个助手函数,如下所述:https://stackoverflow.com/a/32430258/928666.不起作用: 错误:未

  • 我在刀片模板中有一个循环foreach,我在其中打印来自特定模型的数据,问题是我无法获得“$pedido”的值- 奇怪的是当我给这个“$pedido”编码时- 但是编码这个“$pedido- 数据从控制器发送: 另一件奇怪的事情是,我有相同的代码和不同的模型,它是工作的。 提前感谢您的帮助

  • 问题内容: 目前这是我的看法 这是输出 我想展示这样的东西 问题答案: 很简单 首先将解码后的变量发送到视图(请参见Laravel Views): 然后只需使用常见的刀片构造(请参见Laravel模板制作):