首页 > 解决方案 > 我有 Axios,它从 2 个控制器返回 2 个请求,第二个请求不返回任何数据

问题描述

这是配置 Vue

import Api from './Api'
import Csrf from './Csrf'

export default {
     showProd(id) {
        return Api.get('/products/' + id)
    },
    showCat(){
        return Api.get('/products/category')
    },
    loadProds () {
        return Api.get('/products')
    }

}

这是方法内部的内容:()

showProd (id) { 
  Products.showProd(id).then((response) => {//this code works
    this.show1prod = response.data
    console.log(this.show1prod.product_name)
  })
  Products.showCat().then((responseCat) => {//this returns empty
    this.showCat = responseCat.data
    console.log(this.showCat.category_name)
  })
  .catch((error) => {
    alert(error)
  })

}

这是我的控制器和第二个请求的 api,我都有 200 状态,所以我想我正在访问后端,但数据为空

Route::get('/products/category', 'ProductsCategoryController@category');

class ProductsCategoryController extends Controller
{
    public function category()
    {
        $category = ProductsCategory::all();
        return response()->json($category);
    }
}

标签: vue.jsaxioslaravel-7

解决方案


您能否检查一下在后端定义路由的顺序。

您应该products/category 在之前 products/{id}定义, 否则当您调用products/category控制器时products/{id}将使用id = 'category'.

也许这就是你的问题。

你应该去的路线订购。

    Route::get('/products/category', 'ProductsCateogryController@category');

    Route::post('/products/{id}', 'BlahController@blah');

    Route::get('/products', 'BlahBlahController@blahBlah');

如果您以不同的顺序定义路线,将会出现问题。

您可以在控制器中添加某种日志记录,以查看实际调用的是哪个控制器。

    \Log::info('inside products');
    \Log::info('inside products/id');
    \Log::info('inside products/cateogry');

推荐阅读