繁体   English   中英

xmlhttprequest 未发布到 php 文件

[英]xmlhttprequest not being posted to php file

我正在尝试通过 javascript 向本地托管的 php 文件发出发布请求,但 php 文件似乎未接收数据或未显示。 我尝试了各种方法来使用 vardump print_r $_post $_request raw_http_data 进行打印,但似乎没有任何效果。

代码有什么问题? url 有问题吗?

这是 javascript 文件:

const rightswipe = (n) =>{
    var foo = "me";
    var bar = "ft";
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("readystatechange", function() 
    {
        if(this.readyState === 4) 
        {
            if(this.status==200 || this.status==201)
            {
                //let newData = JSON.parse(this.responseText);
                //console.log(newData);
            }
            else{
                alert("invalid link");
            }
        }
    });
    xhr.open("POST", "like.php" , true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send("to_user="+foo+"&from_user="+bar);

};

like.php 是同一文件夹中的一个文件:

if (array_key_exists('foo', $_POST) && array_key_exists('bar', $_POST)) {
    
        $foo = $_POST['foo'];
        $bar = ($_POST['bar']);
        // do stuff with params
    
        echo 'Yes, it works!';
    
    } else {
        echo 'Invalid parameters!';
    }

$_post 和 $_request 也是空的; 和 var_dump($_server["REQUEST_METHOD"]) 返回 "GET" 并在本地托管此站点 xampp 即 apache 和 mysql

我已经设置了一个测试,你的代码工作正常。 我只能看到一个问题,那就是您发布了“to_user”和“from_user”参数,但在您的 PHP 中您检查了“foo”和“bar”键。 因此在我的测试中我得到“无效参数”。 按预期返回。

注意:目前您的 PHP 正在返回文本,因此如果您取消注释 JSON.parse 行,您可能会收到 JavaScript 错误。 确保在 PHP 中对您的响应进行 json_encode。

我不确定您显示请求方法的测试是“GET”,但怀疑它不是有效测试,因为您清楚地发送了 POST 请求。

更新以下讨论:

我安装了 Windows 10 中提到的相同 XAMPP 版本并设置了基本文件,但仍然无法重现问题。

C:\xampp\htdocs\rightswipe.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

  <script src="rightswipe.js"></script>
</body>
</html>

C:\xampp\htdocs\rightswipe.js

const rightswipe = (n) =>{
    var foo = "me";
    var bar = "ft";
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("readystatechange", function() 
    {
        if(this.readyState === 4) 
        {
            if(this.status==200 || this.status==201)
            {
                let newData = JSON.parse(this.responseText);
                console.log(newData);
            }
            else{
                alert("invalid link");
            }
        }
    });
    xhr.open("POST", "like.php" , true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send("to_user="+foo+"&from_user="+bar);

};

C:\xampp\htdocs\like.php

<?php
if (array_key_exists('to_user', $_POST) && array_key_exists('from_user', $_POST)) {
    
        $foo = $_POST['to_user'];
        $bar = ($_POST['from_user']);
        // do stuff with params
    
        echo json_encode('Yes, it works!');
    
    } else {
        echo json_encode('Invalid parameters!');
    }

在 Chrome 中转到 http://localhost/rightswipe.html 并打开开发者工具 (F12)

在控制台选项卡中,我输入rightswipe(1); 并看到控制台日志消息“是的,它有效!”

去.network选项卡检查请求和响应: 用于显示表单数据的网络选项卡标题的屏幕截图

一切都按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM