使用多级对象在javascript中发布请求

时间:2016-03-21 12:59:46

标签: javascript php jquery json ajax

当我尝试发送的对象是多级时,我正在向一个php webservice文件发送json请求。即:

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

我已尝试过网络上的每个示例,但是,当我在php webservice上读取$ _POST数据时,会发生以下两件事: 如果我使用JSON.stringify我在$ _POST或$ _GET上得不到什么取决于我使用的方法,我必须读取file_get_contents(' php://输入')然后json_decode它(而调用来自php的webservce我在$ _GET或$ _POST全局变量中得到了完整的信息, 如果我使用我发现的其他方法,我会得到名字和年龄,但地址是" [object object]"

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

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

谢谢! 弗朗西斯

3 个答案:

答案 0 :(得分:0)

问题#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,因此您应该自己解析请求正文。

答案 1 :(得分:0)

根据我的理解,除非是表格,否则无法从jscipt向php发布数据。但我可以这样做:

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

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

这非常脏或普通吗?

答案 2 :(得分:0)

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

  1. 要将嵌套对象POST到PHP脚本,可以使用plain 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'];

  3. 当我看到PHP实际上给我的error_log(print_r($_POST['test'], true))时,我得到了

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

    一切都在那里。