我已经建立了一个单页应用程序,该应用程序使用控制器(用PHP编写)从API提取数据。 到目前为止,我还没有遇到任何问题,数据填充了表,选择表元素后,它会重新渲染新的url和部分数据(主要是ID),但是在尝试获取用户/ {id}数据时却抛出了错误。 在使用localhost ...... / api / company / user测试相似的链接后,它将数据显示为json,但是localhost ..... / api / company / user / {UserIDHere}的特定链接只是重新呈现了顶部菜单和正文页面完全空白。我完全不知所措。
到目前为止,我已确保API GET链接与route不同。 当前链接如下。
/company
/company/users
/company/users/123
GET请求完成 /公司/用户 和/ company / user / 123 通知用户丢失的S
从理论上讲,它应该不会产生任何问题,尤其是在请求获取以下内容时:
/ company / user-获取具有关联ID等的所有用户 但是/ company / user / {userID}提供了一个错误,提示有意外的令牌<(因为它生成HTML而不是Json)
我已经使用邮递员测试了API端点,它工作得很好,可以为两个请求获取所有数据。下面提供的代码:
这是使用邮递员,用于GET“ / company / user” ..
{"status":"OK","result":{"total":3},"data":[{"id":118,"firstName":"Test123","lastName":"Driver 2","fullName":"Test123 Driver 2","email":"driver2@abc.com","type":"emp","typeName":"Employee","role":"driv","roleName":"Driver","birthDate":null},{"id":139,"firstName":"dsghsdhsd12511","lastName":"sagsdh","fullName":"dsghsdhsd12511 sagsdh","email":"asgsagas@fsaf.sf","type":"con","typeName":"Contractor","role":"acco","roleName":"Accountant","birthDate":null},{"id":122,"firstName":"123321424","lastName":"Driver 3","fullName":"123321424 Driver 3","email":"test@fsafs.sf","type":"emp","typeName":"Employee","role":"driv","roleName":"Driver","birthDate":null}]}
这是使用Postman获取GET“ company / user / 118”
{"status":"OK","data":{"id":118,"firstName":"Test123","lastName":"Driver 2","fullName":"Test123 Driver 2","email":"driver2@abc.com","type":"emp","typeName":"Employee","role":"driv","roleName":"Driver","birthDate":null,"ssn":null,"documents":[],"access":{"accounting":true,"company":false,"dispatch":false,"equipment":false,"safety":false},"accountId":null}}
这是我用来在React代码中获取数据的请求
getUsers() {
Api.get(this.controller, "/company/user", data => {
this.setState({ users: data });
console.log(this.state.users);
});
}
getUser(id) {
if (id) {
Api.get1(this.controller, "/company/user/" + id, data => this.setState({ user: data }));
}
}
获取用户效果很好。 获取用户根本没有。
其他所有链接均指向/ company / users 或如所选表格元素
<Route exact path={"/company/users"} component={() => <UserControlPage/>} />
<Route path={"/company/users/:id"} component={UserControlPage} />
这是被称为的CompanyController函数:
$app->get('/' . API . '/' . self::NAME . "/user", function (Request $request, Response $response) use ($c) {
return Api::get($c->con['api'], $c->log, $request, $response, "/" . self::NAME . "/user", $c->con['session']);
});
$app->get(API . '/' . self::NAME . "/user/{id}", function (Request $request, Response $response, $pp) use ($c) {
return Api::get($c->con['api'], $c->log, $request, $response, "/" . self::NAME . "/user/" . Api::pathParameter($pp, 'id'), $c->con['session']);
});
我希望在选择表中的一个元素后,它将重新呈现页面,选择ID,让所有用户获得要在左侧生成的列表(此部分有效),然后仅生成与之相关的信息其余部分,但是稍后,我收到一个成功的请求(对于所有用户),第二个产生错误消息:
ERROR: SyntaxError: Unexpected token < in JSON at position 0
请告知我格式是否错误/您需要特定的文件或信息,我已经对问题进行了三天的排查,但无法弄清。
答案 0 :(得分:0)
好吧,经过数年的反复尝试,它仍然使我相信控制器的问题多于可能。 注意细节是我的问题。
结果是,唯一的一个丢失的'/'
基本上是这样的:
$app->get(API . '/' . self::NAME . "/user/{id}", function (Request $request, Response $response, $pp) use ($c) {
return Api::get($c->con['api'], $c->log, $request, $response, "/" . self::NAME . "/user/" . Api::pathParameter($pp, 'id'), $c->con['session']);
});
对此:
$app->get('/' . API . '/' . self::NAME . "/user/{id}", function (Request $request, Response $response, $pp) use ($c) {
return Api::get($c->con['api'], $c->log, $request, $response, "/" . self::NAME . "/user/" . Api::pathParameter($pp, 'id'), $c->con['session']);
});
解决了该问题。是的,在API之前一直只缺少一个 / (正斜杠)。
是的,我确实修复了其余的控制器,因为我似乎复制了一个错误,因此将它们全部弄乱了。
感谢所有检查问题的人!