AJAX将JSON发布到PHP在PHP中不发布数据

AJAX将JSON发布到PHP在PHP中不发布数据,php,Php,我在通过jQuery Ajax发送$\u POST数据时遇到问题。我已经把我能找到的关于这件事的一切都读了一遍,但还是一无所获。我甚至回到了非常基本的数据,但仍然一无所获,JSON数据已经使用JSON验证站点进行了验证。就我的一生而言,我无法echo/print\r/var\u dump或访问任何数据 我的JavaScript: $('#updateJSON').click(function(){ var content = [{ "id"

我在通过jQuery Ajax发送
$\u POST
数据时遇到问题。我已经把我能找到的关于这件事的一切都读了一遍,但还是一无所获。我甚至回到了非常基本的数据,但仍然一无所获,JSON数据已经使用JSON验证站点进行了验证。就我的一生而言,我无法
echo
/
print\r
/
var\u dump
或访问任何数据

我的JavaScript:

$('#updateJSON').click(function(){
    var content = [{
                        "id": 21,
                        "children": [{
                            "id": 196
                        }, {
                            "id": 195
                        }, {
                            "id": 49
                        }, {
                            "id": 194
                        }]
                }];
    var someText = "someText";
        $.ajax({
             type: 'POST',
             url: 'test.php',
             data: {data: content},
             cache: false,
             success: function(){  
                 alert("success");
                 console.log(content);
                 window.location = "test.php";
             },
             error:function(){
                 alert('ajax failed');    
             }   
        }); 
}); 
<?php
if(isset($_POST['data'])) {
    $json = stripslashes($_POST['data']);
    var_dump(json_decode($json, true));
} else {
    echo "No Data";
}
?>
我的PHP:

$('#updateJSON').click(function(){
    var content = [{
                        "id": 21,
                        "children": [{
                            "id": 196
                        }, {
                            "id": 195
                        }, {
                            "id": 49
                        }, {
                            "id": 194
                        }]
                }];
    var someText = "someText";
        $.ajax({
             type: 'POST',
             url: 'test.php',
             data: {data: content},
             cache: false,
             success: function(){  
                 alert("success");
                 console.log(content);
                 window.location = "test.php";
             },
             error:function(){
                 alert('ajax failed');    
             }   
        }); 
}); 
<?php
if(isset($_POST['data'])) {
    $json = stripslashes($_POST['data']);
    var_dump(json_decode($json, true));
} else {
    echo "No Data";
}
?>

因此,我得到了
警报(“success”)
,然后被重定向到
test.php
有一次在
test.php
我得到了“无数据”的回音


提前感谢您对此问题提供的帮助。

原因是您正在使用
window.location
重定向到PHP文件(没有任何post数据),而不是在
test.PHP
上发布表单

您可以在
test.php
上发布不带
ajax
的表单

或者在
success
函数中使用
test.php
的响应

$('#updateJSON').click(function(){
    var content = [{
                        "id": 21,
                        "children": [{
                            "id": 196
                        }, {
                            "id": 195
                        }, {
                            "id": 49
                        }, {
                            "id": 194
                        }]
                }];
    var someText = "someText";


$.ajax({
         type: 'POST',
         url: 'test.php',
         data: {data: content},
         cache: false,
         success: function(response){  
             alert("success");
             console.log(response);
             //window.location = "test.php";
         },
         error:function(){
             alert('ajax failed');    
         }   
  }); 

您正在将数据作为字符串传递到ajax文件。请使用JSON.stringify(conten)在ajax文件中以JSON格式传递数据

使用

代替

data: {data: content}
使用:

编辑:

答案的第一部分仍然有效

我已经尝试了您的代码,并在我的机器上对其进行了轻微修改,我能够访问整个数据,您将在下面看到:

Javascript:删除JSON外部的方括号,并删除ajax“数据”部分的花括号,因为它们不是必需的

如您所见,我还向success函数添加了“data”,以便更好地调试test.php的响应

$(文档).ready(函数(){
$('#updateJSON')。单击(函数(){
变量内容={
“id”:21,
“儿童”:[{
“身份证”:196
}, {
“身份证”:195
}, {
“身份证”:49
}, {
“身份证”:194
}]
};
var someText=“someText”;
$.ajax({
键入:“POST”,
url:'test.php',
数据:JSON.stringify(内容),
cache:false,
成功:功能(数据){
警报(数据);
控制台日志(内容);
},
错误:函数(){
警报(“ajax失败”);
}
});
});

});感谢大家的帮助,在大家的帮助下,我终于找到了答案

我需要在test.php文件中创建一个$json=array(),然后填充该数组,$json[]=json_decode($_POST['data'])

这样我就可以将内容放在JSON文件中

以下是php代码:

$('#updateJSON').click(function(){
    var content = [{
                        "id": 21,
                        "children": [{
                            "id": 196
                        }, {
                            "id": 195
                        }, {
                            "id": 49
                        }, {
                            "id": 194
                        }]
                }];
    var someText = "someText";
        $.ajax({
             type: 'POST',
             url: 'test.php',
             data: {data: content},
             cache: false,
             success: function(){  
                 alert("success");
                 console.log(content);
                 window.location = "test.php";
             },
             error:function(){
                 alert('ajax failed');    
             }   
        }); 
}); 
<?php
if(isset($_POST['data'])) {
    $json = stripslashes($_POST['data']);
    var_dump(json_decode($json, true));
} else {
    echo "No Data";
}
?>

test.php
有什么功能?
JSON
将在重定向中消失,您不会将其存储在任何地方。您的控制台日志是否包含
JSON
?是否确实要重定向到test.php?如果您阅读成功回调中test.php的结果(=var_dump):
success:function(response){console.log(response);}
@chris85-上面的php代码就是test.php中的代码-对于我阅读的“gone on redirect”,我觉得使用“POST”并为数据“data:{data:content}”分配一个键值,该数据将存储在$_POST['data']中?也许我误解了我一直在阅读的文档。变量“content”目前保存的是有效的JSON,它只是测试数据,就像我最初尝试使用其他数据时一样,认为我的格式不正确,所以我返回到一篇包含测试数据的基本AJAX文章。@jeff-我真的不需要重定向,我只想将JSON传递给特定的PHP文件,然后在该页面的PHP脚本中使用该JSON。我还尝试了success回调函数,响应为NULL。下面的代码(万一我误解了您的意思):$.ajax({type:'POST',url:'test.php',data:{data:content},cache:false,success:function(response){alert(“success”);console.log(response);//window.location=“test.php”;},错误:function(){alert('ajax failed');};感谢您的回复,我已经尝试了上面的代码,控制台日志显示了一个空值,最初我只是使用“url:”test.php“,没有重定向,然后尝试读取$\u POST['data']这有助于回调响应现在显示JSON数据——我已经尝试过了,但没有通过记录回调响应来验证,所以现在我知道数据正在发送,或者至少通过AJAX看到了数据。但是,我仍然无法在PHP文件test.PHP中输出此数据,$\u POST['data']为空。请在为Ajax的成功函数提供参数后进行检查。success:console上的函数(content)。在success函数中的log(content)我现在得到以下内容:数组(1){[0]=>array(2){[“id”]=>int(21)[“children”]=>array(4){[0]=>array(1){[“id”]=>int(196)}[1]=>array(1){[“id”]=>int(195 2]=>array(1){[“id”]=>int(49)}[3]=>array(1){[“id”]=>int(194)}}}}}现在这看起来不是有效的JSON数据,但是我仍然试图在test.php$\u POST['data']中读取此数据,但仍然为空,再次感谢您的回复,我在test.php中尝试了上面的代码,数据为空,似乎我的问题是js文件和php文件之间的问题,因为从我阅读的所有内容来看,php和js代码都是可以的,但我仍然无法访问
$('#updateJSON').click(function(){
    var content = {
                        "id": 21,
                        "children": [{
                            "id": 196
                        }, {
                            "id": 195
                        }, {
                            "id": 49
                        }, {
                            "id": 194
                        }]
                };

        $.ajax({
             type: 'POST',
             url: 'test.php',
             data: {data: JSON.stringify(content)},
             cache: false,
             success: function(){  
             alert("JSON Updated");
             },
             error:function(){
                 alert('ajax failed');    
             }   
        }); 

});