有没有办法防止 echo json_encode() 在向同一 PHP 脚本提交表单时返回整个页面的 JSON 响应?

问题描述 投票:0回答:1

我在项目中只有这个index.php 文件。我知道我应该将逻辑与视图分开,为 PHP、JS 和 HTML 使用不同的文件。这只是一个测试:

<?php
    if($_SERVER["REQUEST_METHOD"] == "POST") {        
        if(isset($_POST["item"]) && $_POST["item"] == "new") {
            $description = filter_input(INPUT_POST, trim("description"));
            echo json_encode($description);
        }        
    }
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Itens</title>
</head>
<body>
    <form method="post">
        <input type="text" name="description" placeholder="Description">
        <button type="submit">Add Item</button>
    </form>

    <script>
        const form = document.querySelector("form")
        form.addEventListener('submit', async (e) => {
            e.preventDefault()
            const item = "new"
            const description = form.description.value            
            const formData = new FormData()
            formData.append("item", item)
            formData.append("description", description)            
            try {
                await fetch('./index.php', {
                    method: 'POST',
                    body: formData,
                    headers: {
                        'Accept': 'application/json, text/plain, */*'                
                    }
                })
                .then((res) => res.json())
                .then((data) => {                    
                    alert(data)                    
                })
            } 
            catch(error) {}
        })
    </script>
    
</body>
</html>

echo json_encode() 工作并发送响应,但也发送整个页面,重新加载 index.php,这使得无法在 JavaScript 获取代码中使用响应值。当在与调用它的代码不同的脚本中使用 echo json_encode() 时,当然不会发生这种情况。是否可以解决这个问题并保留这个文件结构?

javascript php response reload jsonencode
1个回答
0
投票

是的,将其放入 HTML 中

<?php
    $jsonData = {};

    if($_SERVER["REQUEST_METHOD"] == "POST") {        
        if(isset($_POST["item"]) && $_POST["item"] == "new") {
            $description = filter_input(INPUT_POST, trim("description"));
            $jsonData = json_encode($description);
        }        
    }
?>

<script>
  const json = <?php echo $jsonData; ?>
</script>
<pre><?php echo $jsonData; ?></pre>

您提到的更干净的方法(REST api)是将 json 输出放入单独的 php 脚本中,并使用 javascript 请求 json。

© www.soinside.com 2019 - 2024. All rights reserved.