问题:调取后台接口返回304或者200,Sorry, we need js to run correctly!
原因:查过网上的一些资料说的是因为api的接口和models或者mock里面的字段有出入,不一致,但是我前前后后对照了好几遍,我确定我写的是一样的,问题是同样一个接口,他放别的js页能掉用成功,就放在这个js里调取不成功。
我仔细对比了调取成功的接口和调取失败的接口,
成功的: http://localhost:8000/server/api/xxx/xx/xxx?page=1&size=5
失败的:http://localhost:8000/teacher/server/api/xx/xx/xx?page=1&size=5
很明显失败的比成功的多了一个参数,teacher是我当前页面的路由
解决办法:找到路径在server前面加一个 /
下面贴上源码,方便阅读
Teacher.js
getData = params => {
const { dispatch } = this.props;
dispatch({
type: 'teacher/fetch', // teacher对应的是teache.js fetch对应的是teacher.js里的fetch方法
payload: xxx, // 传的参数
});
};
teacher.js (我这个文件是放在src/models下面的,看各自项目路径,就是调取api接口的js文件)
effects: {
// 获取教师列表
* fetch({ payload }, { call, put }) {
const response = yield call(getTeacher, payload); // api里的getTeacher方法, 我这里只用获取,不用接收返回值,所以我就不写callback了, getTeacher需要在最上面import{getTeacher}from '@/services/api';一下 ,具体调取后台接口我写在另外一篇博文里
yield put({
type: 'getTeacher',
payload: response, // 这个是返回值
});
},
}
api.js
// 不稳定的写法
export async function getTeacher(params = {}) {
return request(`server/api/teacher/list/findByPage?${stringify(params)}`);
// 注意括号里面是`` 不是'', server是你在config里定义的
}
// 调取成功的写法
export async function getTeacher(params = {}) {
return request(`/server/api/teacher/list/findByPage?${stringify(params)}`);
}
// 我其实也没太明白为啥有的加/才能调取成功,有的不用/也能调取成功,emm下次空了再研究,最近赶项目,有知道原因的也可告诉我一声,我react小白,欢迎指教。
注:出现一个问题的原因有很多,我的只是其中的一种解决方法,希望能帮助到您~