【问题标题】:How to correctly receive data sent by AJAX如何正确接收 AJAX 发送的数据
【发布时间】:2019-02-17 06:07:17
【问题描述】:

我有这个 XMLHttpRequest 库:

function easyHTTP() {
  this.http = new XMLHttpRequest();
}

// Make an HTTP POST Request
easyHTTP.prototype.post = function(url, data, callback) {
  this.http.open('POST', url, true);
  this.http.setRequestHeader('Content-type', 'application/json');

  let self = this;
  this.http.onload = function () {
    callback(null, self.http.responseText);
  }

  this.http.send(JSON.stringify(data));
}

在我的 HTML 中,我有一个带有 id="btn" 的按钮标签,当我单击此按钮时,我想将一些数据发送到一个 PHP 文件(名为“ajax.php”),所以我有:

document.addEventListener("DOMContentLoaded", function() { 
      
      const http = new easyHTTP();

      // Create Data 
      const data = {
        title: 'Custom Posts',
        body: 'This is a custom post1'
      };

      document.getElementById('btn').addEventListener('click', function(e){

        // Create Post
        http.post('ajax.php', data, function(err, response){
          if(err) {
            alert(err);
          } else {
            alert(response);
          }
        });

        e.preventDefault();
      });

      
    });

在我的“ajax.php”中,我有:

<?php 

if($_SERVER['REQUEST_METHOD'] == "POST") {

  echo var_dump(json_encode($_POST));

}

?>

但是我从返回中得到的只是一个空数组,它不应该作为我发送的数据的响应吗? (带有“标题”和“正文”的常量数据)?我做错了什么?

【问题讨论】:

  • 一方面,您应该删除var_dump(),只使用echo
  • 如果我执行“echo json_encode($_POST);”我仍然得到一个空数组(“[]”)作为响应

标签: javascript php ajax xmlhttprequest


【解决方案1】:

似乎 XMLHttpRequest 没有将正文发送到 $_POST 而是发送到 'php://input'。

所以而不是:

json_encode($_POST)

你可以使用:

file_get_contents('php://input')

请注意,结果仍然是 JSON 格式。

【讨论】:

  • 请注意,这是标记副本中给出的解决方案。当问题重复时,它们应该被关闭,而不是再次回答。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 2015-12-01
  • 2013-04-26
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多