繁体   English   中英

通过jQuery Ajax将JavaScript数组发送到PHP数组

[英]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现在是一个字符串数组 这是$systemvar_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM