Laravel资源控制器ajax调用


Laravel resource controller ajax call

使用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(没有尾斜杠),ajax调用得到/store,而不是/faq/store

我在这里错过了什么,或者我需要前缀url为我所有的ajax调用的路由?

如果我确实需要添加某种前缀,我如何获得适当的前缀来使用,无论资源控制器被调用?

在命令行中运行此命令,它将列出所有URL路由以及它们所附加的控制器方法:

$ php artisan routes     # Laravel 4
$ php artisan route:list # Laravel 5

按原样创建资源控制器创建7个不同的路由。这些路由都没有在URL中包含store。控制器上存在store方法,但是响应对URL /faq的POST请求(在您的示例中)

这个问题的解决方案

将您的jQuery更改为POST而不是GET您的数据(这是默认的),并将AJAX url更改为'/faq'。然后它应该在那个点到达正确的路线。

就能够在不知道实际路由的情况下击中资源控制器路由而言,这从表面上看是不可能的(想想在不知道google.com存在的情况下试图访问google.com)。我想无论如何我理解你的意图。我假设AJAX请求是作为对某些用户操作(如单击按钮)的响应发送的。你可以给那个按钮附加一个data属性和你想要的值,这样你就可以以一种与资源无关的方式发出这些请求。

像这样:

 <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);
        }
    });
});

公认的答案没有回答我的问题,也许是因为我问得不好。我的问题是,我想利用Laravel的路由命名功能,这样我就不必把"faq"这个词硬编码到我所有的JS文件中。如果控制器的名称发生了变化,那么我需要在每个js文件中进行更改。在做了更多的研究之后,我发现这个图书馆正是我一直在寻找的。我还没有尝试实现它,但它似乎完成了我需要的:https://github.com/fedeisas/laravel-js-routes.