首页 > 解决方案 > 如何向 PHP 后端发出带有参数的 AJAX POST 请求?

问题描述

这是对标记为重复的先前问题的更新(如何向 PHP 发送带有参数的 AJAX POST 请求?

我正在向 PHP 后端发送 AJAX 请求。

发出和接收请求的 Javascript 函数:

var httpRequest;

function makeRequest(){
    httpRequest = new XMLHttpRequest();

    httpRequest.onreadystatechange = receiveResponse;
    httpRequest.open("POST", "ajax_handler.php", true);
    httpRequest.setRequestHeader('Content-Type', 'application/json');
    httpRequest.send(JSON.stringify({key:"value"}));
}

function receiveResponse() {
    if (httpRequest.readyState === XMLHttpRequest.DONE) {
        if (httpRequest.status === 200) {
            console.log(httpRequest.responseText);
        }
    }
}

ajax_handler.php处理请求的 PHP 后端:

<?php
    $data = file_get_contents('php://input');
    echo $data;
?>

我原来的帖子被标记为这个问题的副本。该页面没有明确的示例,尽管我能够推断出我应该使用file_get_contents('php://input')而不是$_POST在 PHP 后端中使用,如图所示。

使用显示的代码,console.log(httpRequest.responseText)在接收函数中将日志记录{"key":"value"}到控制台。但是,如果我尝试将其解释为 PHP 后端中的数组,则使用

<?php
    $data = file_get_contents('php://input');
    echo $data["key"];
?>

响应记录{到控制台而不是预期的value.

除了使用,链接副本'php://input'中的几个响应也使用PHP 后端中的函数。json_decode()

但是,如果我在后端包含此功能,则为

<?php
    $data = json_decode(file_get_contents('php://input'));
    echo $data;
?>

整个 AJAX 调用中断。它被设置为在单击窗口时触发,但在包含 之后json_decode(),单击窗口时不会发生任何事情,调用不会返回任何内容,并且不会将任何内容记录到控制台。

如果没有示例,我很难判断我是否在执行 AJAX 循环错误,或者我的代码中的其他地方是否存在不同的问题。所以,为了所有神圣的事物,请有人将我发布或链接到一个独立的示例,展示如何制作、处理和接收带有 PHP 后端参数的 AJAX 调用? 令人难以理解的是,这在互联网上的某个地方还不存在,但我一直在搜索和询问几天,但我在任何地方都找不到一个例子。这没有 jQuery。

先感谢您。

标签: javascriptphpajax

解决方案


创建一个mcve并逐个调试。

<?php
   $data = json_decode('{ "test": 123 }');
   echo $data;

将输出:

可恢复的致命错误:第 4 行 /...../test.php 中的 stdClass 类对象无法转换为字符串

您有一个表示从 JSON 解码的数据的对象。您需要回应其中有用的部分。例如

<?php
   $data = json_decode('{ "test": 123 }');
   echo $data->test;

推荐阅读