使用 Vanilla Javascript 发布到 Php 文件 [重复]

Posted

技术标签:

【中文标题】使用 Vanilla Javascript 发布到 Php 文件 [重复]【英文标题】:Post to Php file using Vanilla Javascript [duplicate] 【发布时间】:2020-10-19 01:52:13 【问题描述】:

我正在向 php 文件发布一个 OBJECT,问题是,我没有像在表单中那样使用 name="",而是发布了一个对象,请看:

    const done = async obj => 
    console.log("sending JSON to PHP...");
     await fetch("myFile.php",
        
            method: "post",
            headers: 
                'Content-Type': 'application/json'
            ,
            body: JSON.stringify(obj)
        
    )

let obj = 
    email: "ahmad@example.com",
    message: "salam"

const send = async (obj)=>
    let response = await done(obj);

send(obj);

问题是,PHP 将如何解析发布的参数?

这是我尝试过的:

$email = $_POST['email'];
$message = $_POST['message'];

但像往常一样,这不起作用。

[编辑]:

额外问题:以 JSON 格式发送 POSTED 数据重要吗?在使用 fetch API 时这样做重要吗?

【问题讨论】:

请不要用Jquery回复 【参考方案1】:

试试这样的

$body = file_get_contents('php://input');
$data = json_decode($body , true);

$email = $data['email'];
$message = $data['message'];

【讨论】:

我无法理解?你能帮我解释一下吗? 我已经更新了答案,我不知道如何让它更简单【参考方案2】:

当您使用 stringify 时,您的 php 文件将收到您的 json 对象的字符串表示形式。因此,您将不得不使用 json_decode 将字符串转换为 php 对象。

$json = file_get_contents('php://input');
$data = json_decode($json);
$email = $data->email;

进一步说明: 如果请求正文包含 JSON 的字符串表示,则 content-type 标头将为 text/plain,即使 Content-Type 设置为 application/json。因此,在 php 文件中,您必须首先以 file_get_content 作为字符串读取正文中的原始文本,然后将其转换为 php json 对象。

【讨论】:

我尝试过这样做:$email = json_decode($_POST['email']); $message = json_decode($_POST['message']);但它没有用。 我该怎么办? 我收到此错误 第一行从请求体中获取原始数据。 如何设置请求正文请参见此处参考developer.mozilla.org/en-US/docs/Web/API/Request/…

以上是关于使用 Vanilla Javascript 发布到 Php 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vanilla javascript 通过 ajax 将多张照片上传到 Laravel 应用程序?

将对象列表打印为 vanilla javascript 中的链接

javascript JQuery到Vanilla js指南

将数据从 vanilla Javascript 传递到 React 的最佳方式? [关闭]

将动态数据从数组对象插入到引导模式中 - vanilla javascript

javascript 使用vanilla JavaScript爬上DOM树