使用Laravel 4.2,我有一个像这样的资源控制器设置:
Route::resource('faq', 'ProductFaqController');
当我点击服务器上的/faq
网址时,控制器的index()
方法会正确加载。
在js文件中,我想对此资源控制器的其他操作之一进行ajax调用,例如store
操作。因此,我这样做:
$.ajax({
url:'store',
dataType:'json',
success:function(data){
console.log(data);
}
});
我遇到的问题是,由于网址为/faq
(没有尾部斜杠),因此ajax调用将发送到/store
,而不是/faq/store
。
我是否在这里遗漏了某些内容,或者我是否需要为该路线的所有ajax调用添加前缀?
如果我确实需要添加某种前缀,无论是否调用资源控制器,如何使用相应的前缀?
答案 0 :(得分:4)
从命令行运行它,它将列出所有链接在一起的URL路由及其附加的控制器方法:
$ php artisan routes # Laravel 4
$ php artisan route:list # Laravel 5
按原样创建资源控制器会创建7条不同的路由。这些路由中没有一个在URL中的任何位置包含store
。控制器上存在store
方法,但响应对URL /faq
的POST请求(在您的示例中)
此问题的解决方案
将您的jQuery更改为POST而不是GET您的数据(这是默认设置),并将您的AJAX网址更改为'/faq'
。然后它应该在那时达到正确的路线。
只要能够在不知道实际路线的情况下点击资源控制器路线,就不可能(考虑尝试访问google.com而不知道google.com存在)。但我想我明白你要做什么。我假设AJAX请求是作为对某些用户操作的响应而发送的,例如单击按钮。您可以使用您想要的值将数据属性附加到该按钮,以便您可以以与资源无关的方式发出这些请求。
这样的事情:
<button class="test" data-resource="faq">Click me!</button>
$('.test').on('click', function(e) {
var resource = $(this).data("resource");
$.ajax({
url: '/' + resource,
dataType:'json',
type: 'post',
success:function(data){
console.log(data);
}
});
});
答案 1 :(得分:0)
接受的答案没有回答我的问题,也许是因为我问得不好。我的问题是,我想利用Laravel的路由命名功能,这样我就不必将“faq”这个词硬编码到我的所有JS文件中。如果该控制器的名称发生变化,那么我需要在每个js文件中进行更改。在做了一些研究之后,我发现这个库就是我想要的。我还没有尝试过实现它,但它似乎完成了我的需要:https://github.com/fedeisas/laravel-js-routes。