【问题标题】:Laravel route is not working in API, returns page 404Laravel 路由在 API 中不起作用,返回 404 页
【发布时间】:2019-04-02 06:22:31
【问题描述】:

在 routes/api.php 我有以下路由:

Route::post('/session/storeValue', 'HomeController@storeValue');

在控制器中我有 AJAX 功能:

<script>

        function noviArtikal() {

  var data = { name: 'User');

  $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

  $.ajax({
    type: "POST",
    url: '/session/storeValue',
    data: data,
    success: function() {
      console.log("Valueadded");
    }
  });

        };
</script>

但在发送 AJAX 调用时不断收到错误页面未找到。 我做错了什么?

【问题讨论】:

标签: javascript php laravel


【解决方案1】:

只需像这样给路线起任何名字:

Route::post('/session/storeValue', 'HomeController@storeValue')-&gt;name('somename');

在您的 ajax 调用中,只需将 url 属性更改为: url: '{{ route('somename')}}',

Laravel 通过 RouteServiceProvider 自动将 /api 附加到 api 路由,发现是 /Providers 文件夹。

此外,您在进行 Api 调用时也不需要 csrf_token

【讨论】:

    【解决方案2】:

    因为它是 api.php,它会自动将 /api/ 添加到您的 URL。试试 /api/session/storeValue。

    来自文档:

    在 routes/api.php 文件中定义的路由嵌套在一个路由中 由 RouteServiceProvider 分组。在该组中,/api URI 前缀会自动应用,因此您无需手动应用 它到文件中的每条路线。您可以修改前缀和其他 通过修改您的 RouteServiceProvider 类来路由组选项。

    编辑:

    添加名称:

    Route::post('/session/storeValue', 'HomeController@storeValue')-&gt;name('custom_name');

    然后修改你的javascript:

    $.ajax({ type: "POST", url: '/session/storeValue', data: data,

    $.ajax({ type: "POST", url: '{{ route('custom_name')}}', data: data,

    编辑 2: 是的,不要发送 CSRF_TOKEN(检查@Yur Gasparyan 的答案)

    【讨论】:

    • 我试过了,但后来它调用 localhost/appname/public/api/session/storeValue 错误 404
    • 你用过url: {{ route('yourroutename') }}吗?
    • 我只是从按钮调用 onclick="noviArtikal()"
    • 那么不要手动写url,而是通过路由函数。 laravel.com/docs/5.7/routing#named-routes 添加这里提到的名称。然后使用:url: {{ route('yourroutename') }}
    • 但我不确定在哪里调用它,因为我只是用 Ajax 调用调用 js 函数
    【解决方案3】:

    首先,您不需要将CSRF_TOKEN 发送到api。检查CSRF-TOKEN 是没有意义的,因为它是一个api。另外要向 api 发送请求,您需要手动添加 api 前缀。

    【讨论】:

    • 如果我更改为 Route::post('api/session/storeValue', 'HomeController@storeValue');和 url: 'api/session/storeValue',如果你的意思是这样的话,我会调用 localhost/appname/public/api/session/storeValue。
    • 您不需要将 `Route::post('session/storeValue', 'HomeController@storeValue')` 更改为 `Route::post('api/session/storeValue', 'HomeController@ storeValue'). You need to move your routes in routes/api.php`
    【解决方案4】:

    将此代码添加到您的 route/web.php 中

    Route::post('/session/storeValue', 'HomeController@storeValue');
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 2018-02-11
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      相关资源
      最近更新 更多