如何使用 get 发送数据而不在 url 中显示参数?

Posted

技术标签:

【中文标题】如何使用 get 发送数据而不在 url 中显示参数?【英文标题】:How to send data using get without display parameters in url? 【发布时间】:2018-02-14 10:52:27 【问题描述】:

我的情况是这样的:

我的视图刀片 laravel 是这样的:

!! Form::open(['route' => 'shop.payment']) !!
    <input type="hidden" name="result_type">
    <input type="hidden" name="result_data"">
    ...
    <input type="radio" name="payment_method" value="transfer">
    ....
    <checkout-view></checkout-view>
!! Form::close() !!

在视图刀片 laravel 中存在结帐视图的 vue 组件

这样的组件:

<script>
    export default
        template:'<button @click="checkout" class="btn btn-danger pull-right" type="submit">Checkout</button>',
        methods: 
            checkout(e)
                if(window.Laravel.hasOwnProperty('auth')) 
                    $('#payment-form').attr('action', '/shop/payment/checkout')
                    return true;
                
                else 
                    $('#payment-form').attr('action', '/shop/detail')
                    $("#payment-form").attr('method', 'get')
                    return true
                
            
        ,
    
</script>

我的路线 laravel 是这样的:

Route::group(['prefix' => 'shop','as'=>'shop.'], function () 
    Route::get('detail', function()
        return view('shop.detail');
    );
);

如果没有授权,它将运行else 和这样的网址:

http://myshop.dev/shop/detail?_token=FLFJ7MfWi1DZv88Uzk2lrBgVXLN6Y3WHTpskDIED&result_type=&result_data=&payment_method=transfer

我想去掉参数,所以网址是这样的:

http://myshop.dev/shop/detail

我尝试改成post

我变成了这样:

$('#payment-form').attr('action', '/shop/detail')
$("#payment-form").attr('method', 'post')
return true

还有

Route::post('detail', function()
    return view('shop.detail');
);

但它不起作用,存在错误:

POST http://myshop.dev/shop/detail 405(方法不允许)

解决我的问题的正确方法是什么?

【问题讨论】:

所以对于这两种情况,您都使用了 post 方法,但结果出来了,不是吗? @Ataur Ra​​hman Munna,你是什么意思?如果我使用post,则存在错误 【参考方案1】:

您可以使用Inputget 方法这样做:

查看

!! Form::open(['route' => 'shop.payment','method' => 'GET']) !!
    <input type="hidden" name="result_type">
    <input type="hidden" name="result_data"">
    ...
    <input type="radio" name="payment_method" value="transfer">
    ....
    <checkout-view></checkout-view>
!! Form::close() !!

路线

Route::get('/test/route', 'TestController@yourFunction');

控制器

public function yourFunction()

    $result_type = Input::get('result_type');
    $result_data = Input::get('result_date');
    ......


希望你能理解。

【讨论】:

我希望表单继续使用post。如果用户是访客(未登录),它将调用/shop/detail,而 url 中没有参数 @SuccessMan 有了 Post,那有什么问题呢? 您尝试阅读我的问题。我已经详细解释过了。因此,如果用户未登录,我想更改操作 @SuccessMan 我已经阅读了整个问题,并认为这是一个好问题。我对 vue.js 不熟悉。好的 好的。谢谢。我只是没有找到正确的答案【参考方案2】:
Route::group(['prefix' => 'shop','as'=>'shop.'], function () 
    Route::get('detail', function()
    return view('shop.detail');
    );
);

我相信这条路线是 shopdetail,而不是 shop/detail

键入命令php artisan route:list 以查看 laravel 如何查看 url。

【讨论】:

【参考方案3】:

如果没有身份验证,请使用返回重定向到另一个路由而不是返回视图。在您重定向的另一条路由中,返回您想要在没有经过身份验证的用户时显示的原始视图。

【讨论】:

以上是关于如何使用 get 发送数据而不在 url 中显示参数?的主要内容,如果未能解决你的问题,请参考以下文章

post与get

如何使用此脚本向多个人发送电子邮件而不在 to 字段中显示所有电子邮件?

【HTTP】GET传参最大长度的理解误区

解析ajax请求post和get的区别

如何在 iOS 中发送 Get 请求?

有没有办法将参数从一个页面发送到另一个页面而不在 url 中发送它们?