【问题标题】:Refer to Laravel route that have a prefix - Javascript AJAX - Laravel 5.3请参阅具有前缀的 Laravel 路由 - Javascript AJAX - Laravel 5.3
【发布时间】:2017-07-20 22:32:20
【问题描述】:

我的路由文件和使用 Ajax 引用路由时遇到问题。这是所有相关路线和 ajax 代码的片段:

在 web.php(基本路由文件)中,我包含了我需要的路由

require_once base_path('routes/shoppingcard.routes.php');

现在在我的 shoppingcard.routes.php 中是这个困扰我的路由组

Route::group(['prefix' => 'shoppingCard'], function () {
    // add Produkt
    Route::post('addToBasket', ['as' => 'addToBasket', 'uses' => 'Shop\Frontend\AjaxController@index']);
});

我想参考 addToBasket 路线,但直到现在才真正成功

这是我的 Ajax 代码:

$(document).on('click', '#addToBasket', function () {
    var quantitie = $('input[type=number]').val();
    $.ajax({
        type: "post",
        url: "/shoppingCard/addToBasket",  // <----- Route I try to refer to
        data: {'id': $(this).data("id"), 'quantitie': quantitie},
        dataType: 'JSON',
        success: function (data) {
           // not important
        },
        error: function (data) {
           // not important
        }
    });
});

现在我尝试了很多方法来正确参考路线,但我总是得到 500 或 404

我正在使用 Laravel 5.3

我目前在控制台中遇到的错误:

http://mypage.com/shoppingCard/addToBasket [HTTP/1.0 500 内部服务器错误 49ms]

但是路径(shoppingCard/addToBasket)看起来完全没问题,为什么我会出错? 我对此有点困惑

感谢您的帮助!

【问题讨论】:

  • 路径看起来不错,也许检查你的控制器
  • 我做到了,一切都很好。我尝试在这样的路线中返回“hello”:Route::post('addToBasket', function () { return "hello" });但这也没有用

标签: ajax laravel laravel-5 routing laravel-5.3


【解决方案1】:

我给你一个例子来创建多个路由。我取自给定的link。它是一个示例,您可以使用它创建自己的路线。以下是示例:

  1. 创建两个路由文件routes.web.php和routes.api.php
    1. 编辑 RouteServiceProvider.php 文件,如下所示:(注意:您可以添加任意数量的路由,只需遵循相同的逻辑即可。)
<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Routing\Router;

class RouteServiceProvider extends ServiceProvider
{

    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $webNamespace = 'App\Http\Controllers\Web';

    protected $apiNamespace = 'App\Http\Controllers\Api';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router $router
     *
     * @return void
     */
    public function boot(Router $router)
    {
        //

        parent::boot($router);
    }

    /**
     * Define the routes for the application.
     *
     * @param  \Illuminate\Routing\Router $router
     *
     * @return void
     */
    public function map(Router $router)
    {

        /*
        |--------------------------------------------------------------------------
        | Web Router 
        |--------------------------------------------------------------------------
        */

        $router->group(['namespace' => $this->webNamespace], function ($router) {
            require app_path('Http/routes.web.php');
        });

        /*
        |--------------------------------------------------------------------------
        | Api Router 
        |--------------------------------------------------------------------------
        */

        $router->group(['namespace' => $this->apiNamespace], function ($router) {
            require app_path('Http/routes.api.php');
        });

    }
}

请回复我,它是否解决了您的问题。

【讨论】:

    【解决方案2】:

    我没有注意到您使用的是自定义路由文件。你在RouteServiceProvider中映射了自定义路由文件吗?你可以在这里阅读:http://laravel-tricks.com/tricks/laravel-5-multiple-routes-files

    【讨论】:

    • 不,我没有映射路由文件,但我不需要这样做,因为新的路由文件仍然在普通的 web.php 文件中——我只包含它们。这并不是一个全新的路由文件——我有另一家商店,里面有大约 7 个不同的路由文件,但没有在服务提供者中映射它们
    • 您说 addBasket 路由在 shoppingcard.routes.php 中。这不是默认的 web.php
    • 好的,我将新的路由文件添加到服务提供商,但这并没有改变任何事情
    • 您是否按照列出的步骤进行操作?我确定注册这个文件有问题。您可以删除 addBasket 路由并添加到 web.php 以测试它是否有效。如果它有效,那么您就知道问题出在哪里了。
    • 我试图将我的 addToBasket 路由放在基础 web.php 文件中,但 laravel 找不到路由 - 我只是不知道为什么 - 我还写了一个到 web.php 的测试路由这也没有奏效。我很奇怪
    【解决方案3】:

    尝试使用

    $(document).on('click', '#addToBasket', function () {
        var quantitie = $('input[type=number]').val();
        $.ajax({
            type: "post",
            url: "/shoppingCard/addToBasket",  // <----- Route I try to refer to
            data: {'id': $(this).data("id"), 'quantitie': quantitie},
            dataType: 'JSON',
            headers: {
                'X-CSRF-TOKEN': '{{ csrf_token() }}'
            },
            success: function (data) {
               // not important
            },
            error: function (data) {
               // not important
            }
        });
    });
    

    我认为你没有使用csrf_token()。我把它放在里面了。

    【讨论】:

    • 我将 csrf_token 包含在另一个文件中。该代码在另一家商店完全正常。如果我更改参考我的另一家商店的路线,它工作正常。所以javascript代码绝对没问题!
    • (不过我现在也试过了,还是一样的错误)
    • 尝试使用get方法并告诉我它的工作与否?
    • 这意味着您的路线运行不正常。我给你下面的程序来添加另一条路线。请关注并回复我。
    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2021-10-25
    • 2017-05-25
    • 2017-08-10
    • 2018-07-07
    • 2016-03-26
    相关资源
    最近更新 更多