我正在尝试通过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);
查询工作正常。我做错了什么?
为了简化问题,我遗漏了一个事实,即我通过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');
$('#sub_category_box_systems').on('click', '.sub_category_link', function() {
system = heart;
});
答案 0 :(得分:3)
默认情况下,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
现在是一个字符串数组。这是var_dump
的{{1}}:
$system
使用此选项将其转换为整数数组:
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"
}
答案 1 :(得分:2)
您在参数周围添加了一个额外的数组,该数组已经是一个数组。只是做:
$system = $_POST['system'];
答案 2 :(得分:0)
我将答案传给@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(",");
});
答案 3 :(得分:-1)
您可以通过说:
将其转换为字符串data: {
system: heart.join(",")
}
通过说:
转换回服务器端的数组$system = explode(",",$_POST['system']);