Laravel 4,在javascript中传递一个变量来路由

IT技术 javascript laravel laravel-4
2021-03-02 17:07:00

如何将变量 (stock.id) 从 Ajax 响应返回到路由以生成用于编辑股票的 url

$.ajax({
            url: 'sectors/stocks/' + $(this).data('sector-id'),
            dataType:'json',
            beforeSend:function() {
                $('.stocks_list').html('Loading...');
            }
        })
        .done(function(data) {
            $('.stocks_list').html('<ul>');
            $.each(data, function(index, obj_data) {
                $.each(obj_data.stocks, function(indx, stock) {
                    $('.stocks_list').append('<li><a href="{{route("admin.stocks.edit","'+stock.id+'")}}">' + stock.symbol + ' </a></li>');     
                });
        });
    })
5个回答

您可以先使用占位符生成 URL,然后在 javascript 中替换它。

var url = '{{ route("admin.stocks.edit", ":id") }}';
url = url.replace(':id', stock.id);
$('.stocks_list').append('<li><a href="'+url+'">' + stock.symbol + ' </a></li>');
好的,现在可以使用了,谢谢,实际上我做了一些更改,因为 Laravel 转义字符 %
2021-04-21 17:07:00
oop,你说得对。你用什么代替%
2021-05-08 17:07:00
我只是将其更改为另一个字符串,例如 S_id_E
2021-05-11 17:07:00

在我看来,最简单的方法是将 javascript 变量与刀片字符串连接,如下所示。

案例 1:需要路由参数

在这种情况下,传递空字符串代替路由参数以通过所需的验证。

var url = "{{route('admin.stocks.edit', '')}}"+"/"+stock.id;

案例 2:路由参数是可选的

在这种情况下,您不必传递空字符串。

var url = "{{route('admin.stocks.edit')}}"+"/"+stock.id;

在 ajax 中使用路由的最佳方式。


隐藏输入中添加路由将其作为按钮或链接的属性像下面。

这将保存其他 jquery 代码,如 get id 并传递到 url。很简单,只需从输入中获取 url 并作为 URL 传递即可。而已。

<a data-url="{{ route('delete.PendingPatient',['id' => $u->id]) }}" class="btn btn-xs btn-danger btn_delete"> Delete </a>

路线

<?php

Route::delete('/pending_patient/{id}','PatientController@pending_patient'])->name('delete.PendingPatient');

jQuery

    <script type="text/javascript">
        jQuery(document).ready(function(){

          jQuery(document).on('click','.btn_delete',function(){
             var current = jQuery(this);
             var url = current.data('url');

             $.ajax({
                    url: url,
                    dataType:'json',
                    beforeSend:function() {
                        $('.stocks_list').html('Loading...');
                    }
                })
                .done(function(data) {
                    $('.stocks_list').html('<ul>');
                });

              });

         });
     });
</script>

谢谢 lukasgeiter,你让我开心。有用。只需要更改替换方法,因为 laravel scape ":" 到 "%3A"

var url = '{{ url("/admin/solicitud", ":id") }}';
url = url.replace('%3Aid', data.datos[i].id);
dhtml+='<td><a href="'+url+'" class="btn btn-primary" role="button">Ver más...</a></td>';   

或者简单地让id字符串只

var url = '{{ url("/admin/solicitud", "id") }}';
url = url.replace('id', data.datos[i].id);
dhtml+='<td><a href="'+url+'" class="btn btn-primary" role="button">Ver más...</a></td>';
let calculatedId = e.currentTarget.id.split("_")[1];

let url = '{{route('queryToggleStatus', ':queryId')}}';

url = url.replace(':queryId', calculatedId);

$.get(url, function(data, status) {
  console.log (data);
})
它与@lukasgeiter 解决方案相同!
2021-04-28 17:07:00