Javascript 从AJAX请求获取PHP中的JSON数组

Javascript 从AJAX请求获取PHP中的JSON数组,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我正在发送一个带有多个数组的AJAX请求,但我不知道如何获取数据 这就是我要发送的内容: 我是通过jqueryajax发布到PHP文件来实现这一点的。。如何从这里获取数据 谢谢大家! --编辑 这是jQuery var h1 = [] h2 = [] h3 = [], layout = $( "input[type=radio][name='layout_option']:checked" ).val(); $("ul.widget-order[name='1'] li").each(fun

我正在发送一个带有多个数组的AJAX请求,但我不知道如何获取数据

这就是我要发送的内容:

我是通过jqueryajax发布到PHP文件来实现这一点的。。如何从这里获取数据

谢谢大家!

--编辑

这是jQuery

var h1 = []
h2 = []
h3 = [],
layout = $( "input[type=radio][name='layout_option']:checked" ).val();

$("ul.widget-order[name='1'] li").each(function() {  h1.push($(this).attr('id'));  });
$("ul.widget-order[name='2'] li").each(function() {  h2.push($(this).attr('id'));  });
$("ul.widget-order[name='3'] li").each(function() {  h3.push($(this).attr('id'));  });

var sendData = JSON.stringify({
    ids1: " " + h1 + "",
    ids2: " " + h2 + "",
    ids3: " " + h3 + ""
});

$.ajax({
    type: "POST",
    url: "_backend/account/updateWidgets.php",
    data: { data: sendData } + '&layout=' + layout,
    success: function( data ){
        $("#post_reply").html(data);
        console.log( { data: sendData } );
    )};
)};

要在PHP端读取JSON编码的数据:

<?php

$json = file_get_contents('php://input');
$decodedJSON = json_decode($json);

?>


假设对Php文件的post请求成功,您可以使用$\u post变量访问它。

$\u post['data']
包含JSON,因此调用
JSON\u decode()

现在您可以访问
$data['ids1']
$data['ids2']

$.ajax({
  type: "POST",
  url: "_backend/account/updateWidgets.php",
  data: {
    ids1: " " + h1,
    ids2: " " + h2,
    ids3: " " + h3,
    layout: layout
  },
  success: function(data) {
    $("#post_reply").html(data);
    console.log({
      data: sendData
    });
  }
});
实际上没有任何理由将数据作为JSON发送。您可以直接将原始对象放入jQuery
data:
选项中。然后您可以访问参数,如
$\u POST['ids1']
$\u POST['ids2']
,等等

$.ajax({
  type: "POST",
  url: "_backend/account/updateWidgets.php",
  data: {
    ids1: " " + h1,
    ids2: " " + h2,
    ids3: " " + h3,
    layout: layout
  },
  success: function(data) {
    $("#post_reply").html(data);
    console.log({
      data: sendData
    });
  }
});

如果可以,我建议您将发出jQuery请求的方式更改为以下方式:

var h1 = []
h2 = []
h3 = [],
layout = $( "input[type=radio][name='layout_option']:checked" ).val();

$("ul.widget-order[name='1'] li").each(function() {  h1.push($(this).attr('id'));  });
$("ul.widget-order[name='2'] li").each(function() {  h2.push($(this).attr('id'));  });
$("ul.widget-order[name='3'] li").each(function() {  h3.push($(this).attr('id'));  });

var sendData = JSON.stringify({
    ids1: " " + h1 + "",
    ids2: " " + h2 + "",
    ids3: " " + h3 + ""
});
var sPayload = "data=" + encodeURIComponent(sendData) + "&layout=" + encodeURIComponent(layout);
$.ajax({
    type: "POST",
    url: "_backend/account/updateWidgets.php",
    data: sPayload,
    success: function( data ){
        $("#post_reply").html(data);
        console.log( { data: sendData } );
    }
});
您发布的代码中有一些语法错误,我已经在我的答案中包含的代码中更正了这些错误,但最重要的是,我已将您的数据修改为所有一种编码。似乎您试图将JSON对象与编码为
application/x-www-form-urlencoded
的标准数据相结合。我在上面的代码中对此进行了标准化,因此所有数据都以
application/x-www-form-urlencoded
的形式发布

在PHP中,您可以通过以下方式访问:

<?php
// First, let's get the layout because that's the easiest
$layout = (isset($_POST['layout']) ? $_POST['layout'] : NULL);
// As a note, the isset(...) with ternary operator is just my preferred method for checking missing data when extracting that data from the PHP super-globals.

// Now we'll need to get the JSON portion.
$jData = $_POST['data'];
$data = json_decode($jData, $assoc=true);

echo "ids1 is " . $data['ids1'] . "\n<br>\n";
echo "ids2 is " . $data['ids2'] . "\n<br>\n";
echo "ids3 is " . $data['ids3'] . "\n<br>\n";
?>
遵循此代码

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});
我认为数据是ajax对象的属性和post数据中的数据是属性之间存在错误


请发布您的jquery代码。

获取数据是什么意思?PHP会将它视为一个$\u POST变量。@mkaatman我理解,但是在$\u POST之后会放什么呢?我正在尝试:$\u POST['data']但是我没有收到任何东西?你能添加你用来发送帖子的jQuery代码吗?您还可以尝试
var\u dump($\u POST)以查看它是否实际为空。@JDel Hi我添加了jQuery——当我执行
var\u dump($\u POST)时
我收到了null,但是$\u POST变量后面会是什么?我试过$_POST['data'],但它似乎不起作用?正如另一个答案中的人所说,你需要解码json。json_解码什么($_POST);给你做什么:var_dump($json_decoded),其中$json_decoded=json_decode($_POST['data'])检索:NULL@hdifen
$\u POST
是一个数组,而不是JSON
json\u decode($\u POST)
永远不会工作。@ImArron好的,你的bug可能在其他地方。你的帖子成功了吗?你是怎么发邮件的?您的Web服务器设置正确吗?你能不能把你的javascript也放在你的问题里?你可以点击大括号{}来用代码格式化你的文本。抱歉@Barmar我现在已经添加了jQuery,你可以再看一眼吗?为什么要在前面连接一个空格?在结尾连接一个空字符串是完全没有必要的。嗨@Russell我已经添加了代码-你能再看一眼吗?