Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX JSON发布到PHP_Php_Json_Ajax - Fatal编程技术网

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

我试图通过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 ($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));