AJAX JSON发布到PHP
我试图通过AJAX将JSON字符串发布到PHP,但所有示例都不起作用。AJAX JSON发布到PHP,php,json,ajax,Php,Json,Ajax,我试图通过AJAX将JSON字符串发布到PHP,但所有示例都不起作用。 首先,我学到了 然后我编写自己的代码。但我下面的示例代码中没有一个不起作用。并返回一个结果: index.php:6:string '[object Object]' (length=15) index.php:7:null index.php:8:null 第一种变体: <?php $JsonPost = file_get_contents('php://input'); if ($Json
首先,我学到了
然后我编写自己的代码。但我下面的示例代码中没有一个不起作用。并返回一个结果:
index.php:6:string '[object Object]' (length=15)
index.php:7:null
index.php:8:null
第一种变体:
<?php
$JsonPost = file_get_contents('php://input');
if ($JsonPost != null) {
var_dump($JsonPost);
var_dump(json_decode($JsonPost, true));
var_dump(json_decode($JsonPost));
} else {
?>
<html>
<script type="text/javascript">
var RequestObject = new XMLHttpRequest();
RequestObject.open("POST", window.location.href, true)
RequestObject.setRequestHeader('Content-type', 'application/json');
var SomeObject = {};
SomeObject.Field1 = 'lalala';
SomeObject.Array1 = [
'lala1', 'lala2'
];
RequestObject.onreadystatechange = function() {
if (RequestObject.readyState == 4 && RequestObject.status == 200) {
document.getElementById("body").innerHTML = RequestObject.responseText;
}
};
var JsonStr = {JsonPost: JSON.stringify(SomeObject)};
RequestObject.send(JsonStr);
</script>
<body id="body"></body>
</html>
<?php
}
?>
var RequestObject=new XMLHttpRequest();
open(“POST”,window.location.href,true)
setRequestHeader('Content-type','application/json');
var SomeObject={};
SomeObject.Field1='lalala';
SomeObject.Array1=[
“lala1”,“lala2”
];
RequestObject.onreadystatechange=函数(){
if(RequestObject.readyState==4&&RequestObject.status==200){
document.getElementById(“body”).innerHTML=RequestObject.responseText;
}
};
var JsonStr={JsonPost:JSON.stringify(SomeObject)};
send(JsonStr);
第二种变体:
<?php
if (isset($_POST['JsonPost'])) {
var_dump($_POST['JsonPost']);
var_dump(json_decode($_POST['JsonPost'], true));
var_dump(json_decode($_POST['JsonPost']));
} else {
?>
<html>
<script type="text/javascript">
var RequestObject = new XMLHttpRequest();
RequestObject.open("POST", window.location.href, true)
RequestObject.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');
var SomeObject = {};
SomeObject.Field1 = 'lalala';
SomeObject.Array1 = [
'lala1', 'lala2'
];
RequestObject.onreadystatechange = function() {
if (RequestObject.readyState == 4 && RequestObject.status == 200) {
document.getElementById("body").innerHTML = RequestObject.responseText;
}
};
var JsonStr = {JsonPost: JSON.stringify(SomeObject)};
RequestObject.send("JsonPost=" + JsonStr);
</script>
<body id="body"></body>
</html>
<?php
}
?>
var RequestObject=new XMLHttpRequest();
open(“POST”,window.location.href,true)
setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=utf-8');
var SomeObject={};
SomeObject.Field1='lalala';
SomeObject.Array1=[
“lala1”,“lala2”
];
RequestObject.onreadystatechange=函数(){
if(RequestObject.readyState==4&&RequestObject.status==200){
document.getElementById(“body”).innerHTML=RequestObject.responseText;
}
};
var JsonStr={JsonPost:JSON.stringify(SomeObject)};
send(“JsonPost=“+JsonStr”);
请帮忙PHP版本5.6.28
Windows 10上的XAMPP v3.2.2(64位)
浏览器Chrome 56.0.2924.87(64位) 更新 工作示例
<?php
$JsonPost = file_get_contents('php://input');
if ($JsonPost != null) {
var_dump($JsonPost);
var_dump(json_decode($JsonPost, true));
var_dump(json_decode($JsonPost));
} else {
?>
<html>
<script type="text/javascript">
var RequestObject = new XMLHttpRequest();
RequestObject.open("POST", window.location.href, true)
RequestObject.setRequestHeader('Content-type', 'application/json');
var SomeObject = {};
SomeObject.Field1 = 'lalala';
SomeObject.Array1 = [
'lala1', 'lala2'
];
RequestObject.onreadystatechange = function() {
if (RequestObject.readyState == 4 && RequestObject.status == 200) {
document.getElementById("body").innerHTML = RequestObject.responseText;
}
};
//var JsonStr = {JsonPost: JSON.stringify(SomeObject)};
var JsonStr = JSON.stringify(SomeObject);
RequestObject.send(JsonStr);
</script>
<body id="body"></body>
</html>
<?php
}
?>
var RequestObject=new XMLHttpRequest();
open(“POST”,window.location.href,true)
setRequestHeader('Content-type','application/json');
var SomeObject={};
SomeObject.Field1='lalala';
SomeObject.Array1=[
“lala1”,“lala2”
];
RequestObject.onreadystatechange=函数(){
if(RequestObject.readyState==4&&RequestObject.status==200){
document.getElementById(“body”).innerHTML=RequestObject.responseText;
}
};
//var JsonStr={JsonPost:JSON.stringify(SomeObject)};
var JsonStr=JSON.stringify(SomeObject);
send(JsonStr);
非常感谢所有回答的人。您的问题是:
var-JsonStr={JsonPost:JSON.stringify(SomeObject)}代码>
这仍然是一个javasript对象,您必须严格控制整个过程
因此,这应该是可行的:
var JsonStr = JSON.stringify({JsonPost: SomeObject});
RequestObject.send(JsonStr);
第二个变体中的更改如下:
到
原因:
var JsonStr={
创建一个新的真实javascript对象
- 但是这个对象不能与
+
一起使用来连接它
给你:
创建一些JSON
将JSON设置为对象属性的值
隐式地将对象转换为字符串(将是“[object object]”
)
将该字符串作为请求主体发送
但是,由于您试图发布JSON,您应该跳过步骤2和3…只传递JSON:
RequestObject.send(JSON.stringify(SomeObject));
保持简单,只做需要的事情。例如,您正在对json进行字符串化,因此不需要使用'application/json'
。请再次使用简单版本(如第一个链接中所示)对其进行测试。在第二次试用中也要测试RequestObject.send(“JsonPost=“+json.stringify(SomeObject));
。因为使用{
在var JsonStr={
您再次创建了一个真正的json对象。预期的结果是什么?非常感谢所有回答的人。决定非常简单,我没有注意到)您正在尝试将json编码为应用程序/x-www-form-urlencoded
格式的键值。您的尝试有两个问题(1)您没有对JSON进行URL编码,因此可能会导致数据错误。(2)PHP希望主体是原始JSON,而不是嵌入在application/x-www-form-urlencoded data中的JSON。var JsonStr={创建了一个新的json对象-它没有。它创建了一个JavaScript对象。请参阅@Quentin I nothing nothing。我遵循了w3schools.com/js/js_json_php.asp中的示例,在这里找到了一个版本错误,并给出了修复它的提示。顺便向(w3schools.com)发送了一封邮件。“我什么都没尝试”-你写了一些代码。这些代码一定是想做点什么。“我遵循了w3schools.com/js/js_json_php.asp中的示例”-W3Schools示例具有不同的PHP。您所做的更改与问题中的PHP不兼容。您正在尝试将JSON编码为应用程序/x-www-form-urlencoded
格式的键值。您的尝试存在两个问题:(1)您没有对JSON进行URL编码,因此可能最终导致数据错误。(2)PHP希望主体是原始JSON,而不是嵌入在application/x-www-form-urlencoded数据中的JSON。@JustOnUnderMillions-你为什么要回应我对zelding代码的评论?
RequestObject.send("JsonPost=" + JSON.stringify(SomeObject));
var JsonStr = {JsonPost: JSON.stringify(SomeObject)};
RequestObject.send(JsonStr);
RequestObject.send(JSON.stringify(SomeObject));