【发布时间】:2019-08-11 16:39:23
【问题描述】:
我正在尝试从 Ionic 4 向我的 Laravel API 发出 http post 请求。 我之前使用相同的 API 成功地制作了其他帖子。 但由于某种原因,我无法完成这项工作。
Laravel 后端的方法接收一个 ID,然后发送一封附有 PDF 的电子邮件。
我已经用 Postman 工具对其进行了测试,它工作正常。但是当我在 Ionic 4 App 上进行测试时,它不起作用。
我尝试用不同的选项更改标题但没有运气。
我在 Laravel 后端设置了这样的 CORS:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS") {
die();
}
在 Postman 上它按预期工作: https://i.imgur.com/sNuJCzK.png https://i.imgur.com/ZgLJA20.png
这是我的Player.service.ts:
pdf(idPlayer): Observable<any> {
let json = {
idplayer : idPlayer
};
let params = "json=" + JSON.stringify(json);
const httpOptions = {
headers: new HttpHeaders({
'Accept': 'application/json',
'Authorization' : localStorage.getItem("token"),
'Content-Type' : 'application/x-www-form-urlencoded',
})
};
console.log("PDF PARAMS:");
console.log(params);
return this._http.post('http://127.0.0.1:8000/api/pdf/email', params, httpOptions);
}
这是在我的Tab-Profile.page.ts上调用服务的函数:
enviarPdf() {
this._playerService.pdf(this.player._id).subscribe(
response => {
console.log("SEND PDF:");
console.log(response);
},
error => {
console.log("error sendPDF:");
console.log(error);
});
}
这是 Chrome 控制台上的错误:
编辑:
这是我在PlayerController.php中的php函数:
public function ToPdf(Request $request) {
// Obtener usuario identificado
$token = $request->header('Authorization');
$jwtAuth = new \JwtAuth();
$checkToken = $jwtAuth->checkToken($token);
$user = $jwtAuth->checkToken($token, true);
$json = $request->input('json', null);
$params_array = json_decode($json, true);
$id_player = $params_array['idplayer'];
$player = Player::find($id_player);
$pdf = PDF::loadView('templatePdf', $player);
$pdf_name = $player->id . '.pdf';
$content = $pdf->output();
\Storage::disk('players')->put('/pdf/' . $pdf_name, $content);
$exists = \Storage::disk('player')->exists('/pdf/' . $pdf_name);
if (!$exists) {
$data = array(
'code' => 400,
'status' => 'error',
'message' => 'Error PDF.',
'pdf' => $pdf_name
);
}
else {
$email_params = array(
'userName' => $user->name,
'playerId' => $player->id,
'playerName' => $player->name,
'playerSurname' => $player->surname,
);
// Mail::to($user->email)->queue(new EmailPdf($email_params));
Mail::to($user->email)->queue(new EmailPdf($email_params));
\Storage::disk('players')->delete('/pdf/' . $pdf_name);
$data = array(
'code' => 200,
'status' => 'success',
'message' => 'Email sended successfully.',
);
}
return response()->json($data, $data['code']);
}
【问题讨论】:
-
问题在于您发送的参数。你能展示一下从 Postman 发送参数时的样子吗?
-
如果您注意到,即使错误消息也说明了有关 array_merge() 问题的内容。
-
跟js没关系。看起来电子邮件呈现有问题。请在您的问题中添加更多 Laravel 代码(控制器操作、电子邮件发送)。
-
@vivek_23 看起来像这样i.imgur.com/ZgLJA20.png。我也认为我与我发送的参数有关,因为当我从 Postman 中删除参数时,我在 Ionic 应用程序上测试函数时会遇到同样的错误。
-
@AndriyLozynskiy 我已经用渲染和发送电子邮件的 PlayerController php 代码更新了问题。