[英]Send JavaScript array to PHP array via jQuery Ajax
我正在尝试通过jQuery Ajax将JavaScript数组发送到新的PHP数组:
var heart = [31,32,33,34,35,36,37,38,39,42,43];
$('#find_btn').click(function(){
$.ajax({
type: "POST",
url: 'scripts/get_specimens_system.php',
data: {
system: heart,
},
success: function(data) {
$('#search_list_container').html(data);
}
});
});
在PHP脚本中,在执行MySQL查询之前,需要执行以下操作:
$system = array($_POST['system']);
如果我硬编码数据, heart
,如:
$system = array(31,32,33,34,35,36,37,38,39,42,43);
查询工作正常。 我究竟做错了什么?
为了简化这个问题,我省略了以下事实:我通过system = $(this).attr('data-system');
将JS数组设置为var system
system = $(this).attr('data-system');
数据系统设置为以下数组的位置:
$('#sub_category_box_systems').html("<a class='sub_category_link' href='#' data-subcat-type='system' data-system='" + brain + "'>Brain</a><br /><hr><a class='sub_category_link' href='#' data-subcat-type='system' data-system='" + nerves + "'>Nerves</a><br /><hr><a class='sub_category_link' href='#' data-subcat-type='system' data-system='" + cerebellum + "'>Cerebellum</a>");
现在,如果我在AJAX语句之前向system
发出警报,则警报将显示整数。
$('#sub_category_box_systems').on('click', '.sub_category_link', function() {
system = $(this).attr('data-system');
});
$('#find_btn').click(function(){
alert(system);
$.ajax({
type: "POST",
url: 'scripts/get_specimens_system.php',
data: {
system: system,
},
success: function(data) {
}
});
});
并且我已经将PHP文件更新为:
$system = $_POST['system'];
尽管我将var system
与数组的实际var(例如, heart
)交换,但仍然没有办法,因为它可以作为Ajax数据工作。 那这怎么了? (很抱歉更改此OP ...)。
奇怪的是,如果我将var system
更改为如下所示的特定数组,则可以正常工作,因此使用jQuery .attr('data-system');
的格式设置一定存在一些问题.attr('data-system');
$('#sub_category_box_systems').on('click', '.sub_category_link', function() {
system = heart;
});
默认情况下,jQuery $.ajax
将提交您的请求作为表单数据。 如果在发送请求时打开浏览器调试器,则会看到以下请求数据:
system[]:31
system[]:32
system[]:33
system[]:34
system[]:35
system[]:36
system[]:37
system[]:38
system[]:39
system[]:42
system[]:43
PHP知道这是一个数组,默认情况下以数组形式读取它。 您不应将其包装在array()
标记中。
您可以将数组分配给自己的变量,如下所示: $system = $_POST['system'];
但是,您的工作还没有完成。 $system
现在是一个字符串数组 。 这是$system
的var_dump
:
array(11) {
[0]=>
string(2) "31"
[1]=>
string(2) "32"
[2]=>
string(2) "33"
[3]=>
string(2) "34"
[4]=>
string(2) "35"
[5]=>
string(2) "36"
[6]=>
string(2) "37"
[7]=>
string(2) "38"
[8]=>
string(2) "39"
[9]=>
string(2) "42"
[10]=>
string(2) "43"
}
使用它将其转换为整数数组 :
$system = array_map('intval', $system);
您正在参数周围添加一个额外的数组,该数组已经是数组。 做就是了:
$system = $_POST['system'];
我将答案授予@Barmar
因为他的解决方案解决了原始OP。 由于使用system = $(this).attr('data-system')
我仍然无法将JS数组传递到PHP数组。 将代码更改为以下已解决的问题:
$('#sub_category_box_systems').on('click', '.sub_category_link', function() {
system = $(this).attr('data-system').split(",");
});
您可以通过以下方式将其转换为字符串:
data: {
system: heart.join(",")
}
然后说回服务器端的数组:
$system = explode(",",$_POST['system']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.