在具有多级对象的 JavaScript 中发布请求

post request in javascript with multilevel object

本文关键字:布请求 请求 JavaScript 多级 对象      更新时间:2023-09-26

当我尝试发送的对象是多级时,我会疯狂地向 php 网络服务文件发布一个 json 请求。 即:

postdata = {
   name:"francesco"
,  age:58
,  address : {
      street:"my Street"
   ,  number: 42
   ,  city:"London"
   }
}

我已经尝试了网络上的所有示例,但是,当我在php Web服务上读取$ _POST数据时,发生了两件事:如果我使用 JSON.stringify,我不会得到任何 $_POST 或 $_GET 的东西,这取决于我使用什么方法,我必须读取 file_get_contents('php://input'),然后json_decode它(而从 php 调用 webservce,我在我的 $_GET 或 $_POST 全局中整齐地获取信息),如果我使用我找到的其他方法,我会得到名称和年龄,但地址显示为"[对象对象]"。

我的问题是,是否可以在不使用jquery的情况下:- 在JavaScript中创建一个对象(多级或正确的术语)- 使用 "XMLHttpRequest()" 对象将其发布到 php ws?- 使用 $_GET 或 $_POST 全局变量从 PHP 读取它(取决于使用的方法)?

我已经发疯了超过96个小时了!!

谢谢!弗朗切斯科

这里有太多不正确的答案。

  1. 要将嵌套对象发布到PHP脚本中,您可以使用纯js:

    var xhr = new XMLHttpRequest();

    xhr.open("POST", "http://yourwebsite.com/yourscript.php");

    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");

    xhr.send({"data":postData});

  2. 阅读信息服务器端

    $postData = $_POST["数据"];

当我查看PHP实际上给了我什么error_log(print_r($_POST['test'], true))我得到了

Array
(
    [name] => francesco
    [age] => 58
    [address] => Array
        (
            [street] => my Street
            [number] => 42
            [city] => London
        )
)

一切都在那里。

问题 #1

是否可以在JavaScript中创建对象(多级或正确的术语)

这是你在javascript中创建对象的方式:

var o = {
    foo: "bar"
};

问题 #2

是否可以使用 "XMLHttpRequest()" 对象将其发布到 php ws?

在网上不难找到它:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

代码如下所示:

var oReq = new XMLHttpRequest();
oReq.open("POST", "http://www.example.org/target");
oReq.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
oReq.send(JSON.stringify(postdata));

问题 #3

是否可以使用 $_GET 或 $_POST 全局变量(取决于使用的方法)从 PHP 读取它?

不,你不能。正如文档所说,$_POST是:

当使用application/x-www-form-urlencode或multipart/form-data作为请求中的HTTP Content-Type时,通过HTTP POST方法传递给当前脚本的变量的关联数组。

因此,仅当您传递表单编码数据时,$_POST才可用。由于您要传递 JSON,因此您应该自己解析请求正文。

据我了解,除非是表单,否则不可能从jscipt将数据发布到php。 但我可以这样做:

if ($_POST != null)    
  $req = $_POST;
else {
   $json = file_get_contents('php://input');   
   $req = json_decode($json, true);
}

.. 然后只需阅读$req..

这是很脏还是司空见惯??