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

时间:2014-09-04 02:20:28

标签: javascript php 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);

查询工作正常。我做错了什么?

为了简化问题,我遗漏了一个事实,即我通过var system

将JS数组设置为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;
});

4 个答案:

答案 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']);