使用Laravel 4.2,我有一个像这样的资源控制器设置:
Route::resource('faq', 'ProductFaqController');
当我/faq
在服务器上单击URL时,将index()
正确加载控制器的方法。
在一个js文件中,我想对该资源控制器的其他动作之一进行ajax调用,例如该store
动作。因此,我这样做:
$.ajax({
url:'store',
dataType:'json',
success:function(data){
console.log(data);
}
});
我遇到的问题是,由于URL是/faq
(不带斜杠),因此对/store
而不是进行了ajax调用/faq/store
。
我是否在这里丢失了某些东西,或者是否需要为所有ajax调用的URL加上路由前缀?
如果确实需要添加某种前缀,那么无论调用资源控制器如何获取合适的前缀都可以使用?
从命令行运行此命令,它将列出所有URL路由以及它们所附加的控制器方法:
$ php artisan routes # Laravel 4
$ php artisan route:list # Laravel 5
按原样制作资源控制器会创建7条不同的路由。这些路由都不包含store
URL中的任何位置。该store
方法存在于控制器上,但响应对URL的POST请求/faq
(在您的示例中)
解决这个问题的方法
将jQuery更改为POST而不是获取数据(这是默认设置),然后将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);
}
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句