我试图传递一个数组到PHP脚本和从PHP脚本返回一个数组,我已经测试了json_ecode部分及其工作但我无法在php端获得json_decode。
的Javascript
scid_list = [];
$('.filter_on').each(function(){scid_list.push($(this).data("scid"));});
$.ajax({
type: "POST",
dataType: "json",
data: {scid_list:scid_list},
url: "/scripts/products_filter.php",
success: function(data){
alert(data.join('\n'));
}
});
PHP
<?php
$scid_list=(json_decode($_POST['scid_list'], true));
echo json_encode($scid_list);
exit();
?>
我也尝试在解码时忽略真实
$scid_list=(json_decode($_POST['scid_list']);
并且根本不解码
$scid_list=$_POST['scid_list'];
我不确定我错过了什么。我也尝试过序列化数据,但如果你将dataType指定为json,我就不必阅读,我尝试使用stripslashes
感谢任何帮助!
干杯
答案 0 :(得分:1)
我认为问题在于,即使您在Ajax调用中指定了数据,您发送的数据也不是json。因为它只是你得到的二维数组,为什么不在你的JS中使用Array.join之前做这个帖子:
{ url: url }
这会把它变成逗号分隔的字符串。例如
var scids = scid_list.join(',');
您也可以简化Ajax调用:
"id1,id2..."
然后在PHP文件中,您可以使用explode()将其重新转换为数组:
$.post('/scripts/products_filter.php', {scids: scids}, function(data) {
// process data response here
});
希望一切都有意义。
答案 1 :(得分:1)
您的dataType
参数指定您希望JSON数据作为响应,但这并不意味着您将数据作为JSON发送。在你的情况下,你发送一个数组,因此用PHP而不是:
$scid_list=(json_decode($_POST['scid_list'], true)); /* WRONG */
你应该简单地使用:
$scid_list=$_POST['scid_list'];
dataType(默认值:Intelligent Guess(xml,json,script或html))
类型:字符串您期望从中返回的数据类型 服务器
总而言之,对于给定的HTML:
<form action="work.php" method="post">
<p><input class="filter_on" data-scid="22" type="checkbox" /> Filter 22</p>
<p><input class="filter_on" data-scid="28" type="checkbox" /> Filter 28</p>
<p><input class="filter_on" data-scid="31" type="checkbox" /> Filter 31</p>
<p><input type="submit" value="Send" /></p>
</form>
和SCRIPT:
$(document).on('ready', function() {
$('form').on('submit', function(e) {
e.preventDefault();
scid_list = [];
$('.filter_on:checked').each(function(i){
scid_list.push( $(this).data("scid") );
});
$.ajax({
type: "POST",
dataType: "json",
data: {scid_list:scid_list},
url: "work.php",
success: function(data){
alert(data.join('\n'));
}
});
});
});
PHP部分是:
$scid_list=$_POST['scid_list'];
echo json_encode($scid_list);
exit();