如何使用 fetch 和 catch 引用对 PHP 文件做出反应

我正在尝试使用 fetch 和 catch 方法将 JSON stringfy 请求发送到 PHP 文件,我可以执行某些函数。


现在我没有收到任何错误,但我无法让该功能正常工作。


        fetch('http://localhost/server/mail.php', {

            method: 'POST',

            redirect: 'follow',

            headers : { 

                'Content-Type': 'application/json',

                'Accept': 'application/json'

               },

            body: JSON.stringify({ // Passes values to mail.php

                name: inputName,

                phone: inputPhone

            }),

        })

        .then(response =>{

            console.log(response);

            if(response === 'success'){

                history.push("/start"); // Route to another page

                history.go(0);

            }

        })

        .catch(function(err) { // Return error

            console.log(err);

        });

如果我调试,console.log(response)我会收到包含以下内容的反应对象:


响应{type:“cors”,url:“http://localhost/server/mail.php”,重定向:false,状态:200,ok:true,bodyUsed:false,...}


最后,我使用 PHP Mailer 库通过它发送邮件的 PHP 代码,我之前在另一个项目中使用过相同的代码,应该可以正常工作。


<?php

use PHPMailer\PHPMailer\PHPMailer;

use PHPMailer\PHPMailer\Exception;


require './phpmailer/src/Exception.php';

require './phpmailer/src/PHPMailer.php';

require './phpmailer/src/SMTP.php';


$name = $_POST['name'];

$from = 'admin@yotamdahan.com'

$to = 'admin@yotamdahan.com'; 

$message = $_POST['phone'];

$subject = 'משתמש חדש';


$mail = new PHPMailer();

$mail->SMTPDebug = 0;

$mail->CharSet = 'UTF-8';

$mail->SMTPAuth   = true;

$mail->Host   = "server270.web-hosting.com";

$mail->Port       = 465;

$mail->Username   = $to;

$mail->Password   = "*******";

$mail->SMTPSecure = "ssl";

$mail->setFrom($from);

$mail->Subject  = $subject;

$mail->isHTML(true);

$mail->Body = "שם השולח: " . $name . "\r\n <br/> הודעה: " . $message;

$mail->addAddress($to, 'Yotam Dahan');


if(!$mail->Send())

{

   echo "Error sending: " . $mail->ErrorInfo;

}

else

{

   echo "success";

}

我的问题是 PHP 没有发送电子邮件,我猜想,inputName并且InputPhone没有正确传递,因此代码无法运行,响应也不是success应有的样子。


如何通过reactJS中的fetch和catch向PHP发送正确的POST请求?


潇湘沐
浏览 79回答 1
1回答

30秒到达战场

您正在发送数据,application/json但从$_POST获取数据application/x-www-form-urlencoded。您可以使用FormData正确的内容类型创建数据,然后将URLSearchParams其传递FormData给获取函数的主体。您可以像这样使用 FormData:const formData = new FormData();formData.append("name", inputName);然后像这样发送fetch('http://localhost/server/mail.php', {&nbsp; method: 'POST',&nbsp; redirect: 'follow',&nbsp; body: new URLSearchParams(formData)});
打开App,查看更多内容
随时随地看视频慕课网APP