【问题标题】:post request in javascript with multilevel object使用多级对象在 javascript 中发布请求
【发布时间】:2016-07-08 00:02:45
【问题描述】:

当我尝试发送的对象是多级的时,我会疯狂地将 json 请求发布到 php webservice 文件。即:

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

我已经尝试了网络上的每个示例,但是,当我读取 php webservice 上的 $_POST 数据时,会发生两件事: 如果我使用 JSON.stringify 我不会在 $_POST 或 $_GET 上得到任何东西,具体取决于我使用的方法,我必须读取 file_get_contents('php://input') 然后 json_decode 它(而从 php 我调用 webservce在我的 $_GET 或 $_POST 全局变量中整齐地获取信息), 如果我使用我找到的其他方法,我可以得到名字和年龄,但地址是“[object object]”。

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

我已经疯了 96 多个小时了!!!

谢谢! 弗朗切斯科

【问题讨论】:

  • 试试这个stackoverflow.com/questions/36084283/…>
  • @VijayWilson 他说“我已经尝试了网络上的所有示例”所以我认为这对他没有帮助。
  • 是的,有可能。这就是 AJAX 的全部意义所在。你能展示你尝试过的实际代码吗?
  • 例如:stackoverflow.com/questions/30976705/… 在 php 中给了我一个空的 $_POST
  • 但确实给了我:$json = file_get_contents('php://input'); $obj = json_decode($json, true);

标签: javascript php jquery json ajax


【解决方案1】:

问题 #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 读取它(取决于使用的方法)?

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

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

所以$_POST 只有在您传递表单编码数据时才可用。由于您传递的是 JSON,因此您应该自己解析请求正文。

【讨论】:

  • 我想你在最后一部分已经回答了! ... 愚弄我的是我使用的是多年前在网上找到的例程:
  • .. 将 javascript 对象转换为请求字符串,即(使用我的示例): ?name=francesco&age=58 .. 但是当它必须面对对象的第二级时,这显然会失败.那么如何编写一些可以同时处理正确的 post 请求和这些请求的 php 代码呢?
  • @Francesco 这实际上是另一个问题。建议单独发一个
  • 谢谢,我会自己想办法解决的,如果遇到困难再发帖!
【解决方案2】:

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

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

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

这是非常肮脏或司空见惯的事情吗??

【讨论】:

  • 绝对有可能。 jQuery $.ajax 正是这样做的。
【解决方案3】:

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

  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['data'];

当我通过error_log(print_r($_POST['test'], true)) 查看 PHP 实际为我提供了什么时,我得到了

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

)

一切都在那里。

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2012-09-12
    • 1970-01-01
    • 2021-07-03
    • 2015-04-01
    • 2018-09-02
    相关资源
    最近更新 更多