当我尝试发送的对象是多级时,我正在向一个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小时了!!!
谢谢! 弗朗西斯
答案 0 :(得分:0)
是否可以在javascript(多级或正确的术语)中创建对象
这是您在javascript中创建对象的方式:
var o = {
foo: "bar"
};
是否可以使用“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));
不,你不能。正如docs所说,是否可以使用$ _GET或$ _POST全局变量从php中读取它(取决于使用的方法)?
$_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)
这里有很多不正确的答案。
要将嵌套对象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});
阅读信息服务器端
$ postData = $ _POST ['data'];
当我看到PHP实际上给我的error_log(print_r($_POST['test'], true))
时,我得到了
Array
(
[name] => francesco
[age] => 58
[address] => Array
(
[street] => my Street
[number] => 42
[city] => London
)
)
一切都在那里。