我有一条以JSON格式返回帖子数据的路线:
Route::get('posts/{post}/data', 'PostController@getData')->name('data.post');
由JS在前面调用:
<a href="#" data-post-id="{{ $post->id }}" class="post-links">{{ $post->title }}</a>
点击绑定如下:
$(".post-links").click(function() {
var postId = $(this).data('post-id');
$.get( "{{ route('data.post') }}" + postId, function(data) {
// process the data...
});
});
这里的问题是,get
的URL必须在前端生成,具体取决于点击了哪个链接,但Laravel在渲染视图时已经处理了route
方法。如果没有id
参数,则路由生成失败。如何使用参数获取路径基础?
答案 0 :(得分:2)
在Js你可以做这样的事情。
var postId = $(this).data('post-id');
var url = "{{ route('data.post', ':url') }}";
url = url.replace(':url', postId);
用于多张外卡
var postId = $(this).data('post-id');
var anotherId = 1;
var url = "{{ route('test', [':url',':url1']) }}";
url = url.replace(':url', postId);
url = url.replace(':url1', anotherId);
希望这会对你有所帮助。
答案 1 :(得分:0)
这是另一种较少依赖前端代码的方式:
将route参数设置为可选:
Route::get('data/posts/{post?}', 'DataController@post')
->name('data.posts);
现在,您可以轻松调用基本路由并在JS中附加id:
$(".post-links").click(function() {
var postId = $(this).data('post-id');
$.get( "{{ route('data.posts') }}/" + postId, function(data) {
// process the data...
});
});
比替换字符串更整洁!
这确实有一些缺陷需要避免,即可选参数使/data/posts
之类的路由成为有效路由,因此如果帖子为null
,您只需处理该异常。
我相信这是一个更好的解决方案,所以我将此作为正确答案,但我也喜欢其他解决方案。
更新:考虑到原始问题,即关于占位符或可替换值的问题,另一个答案是事实上正确的。我自己的这个答案是使用占位符的替代方法,所以我将另一个答案标记为正确答案。