Javascript 从AJAX请求获取PHP中的JSON数组
我正在发送一个带有多个数组的AJAX请求,但我不知道如何获取数据 这就是我要发送的内容: 我是通过jqueryajax发布到PHP文件来实现这一点的。。如何从这里获取数据 谢谢大家! --编辑 这是jQueryJavascript 从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
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发送。您可以直接将原始对象放入jQuerydata:
选项中。然后您可以访问参数,如$\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
是一个数组,而不是JSONjson\u decode($\u POST)
永远不会工作。@ImArron好的,你的bug可能在其他地方。你的帖子成功了吗?你是怎么发邮件的?您的Web服务器设置正确吗?你能不能把你的javascript也放在你的问题里?你可以点击大括号{}来用代码格式化你的文本。抱歉@Barmar我现在已经添加了jQuery,你可以再看一眼吗?为什么要在前面连接一个空格?在结尾连接一个空字符串是完全没有必要的。嗨@Russell我已经添加了代码-你能再看一眼吗?