将复选框数组传递到AJAX调用

时间:2019-01-10 17:57:09

标签: javascript php arrays ajax checkbox

我正在尝试将复选框数组传递到AJAX调用中,以用于正在处理的搜索表单:

HTML:

<form id="searchForm">
    <input type="checkbox" class="typesSearch" name="types[]" value="Fundraiser" checked />&nbsp;Fundraiser<br>
    <input type="checkbox" class="typesSearch" name="types[]" value="Conference" checked />&nbsp;Conference<br>
</form>

JavaScript:

var types = [];

var eventTypes = document.forms['searchForm'].elements[ 'types[]' ];

for (var i=0, len=eventTypes.length; i<len; i++) {
    if (eventTypes[i].checked ) {
        types.push($(eventTypes[i]).val());
    }
}

$.ajax({
    url: "https://www.example.com/search.php",
    method: "post",
    data:{
        eventname: eventname,
        types: types
    },
    dataType:"text",
    success:function(data)
    {
        $('#eventsList').html(data);
        $('#eventsList').slick($opts);
    }
});

PHP:

$event_types = $_POST['types'];

types数组在javascript方面很好,当它到达PHP端时,将$ _POST ['types']读取为空。

为什么$ _POST ['types']被读为空?在AJAX调用中是否需要定义要传递的是数组而不是字符串?

3 个答案:

答案 0 :(得分:1)

尝试在“数据”中使用以下内容:

$.ajax({
    url: "https://www.example.com/search.php",
    method: "POST",
    data:{
        eventname: eventname,
        types: JSON.stringify(types)
    },
    dataType:"text",
    success:function(data)
    {
        $('#eventsList').html(data);
        $('#eventsList').slick($opts);
    }
});

这样,类型是一个字符串,您需要将其解析为PHP端的数组对象。

在服务器端,您可以使用以下代码获取阵列。 $ item [0]

$event_types = $_POST['types'];
$item = (json_decode(stripslashes($event_types)));

答案 1 :(得分:1)

您需要序列化数组以便在$ _POST中接收它,因此您的ajax应该如下所示:

$.ajax({
    url: "https://www.example.com/search.php",
    method: "post",
    data:{
        eventname: eventname,
        types: JSON.stringify(types) //serializied types[]
    },
    dataType:"text",
    success:function(data)
    {
        $('#eventsList').html(data);
        $('#eventsList').slick($opts);
    }
});

答案 2 :(得分:0)

您可能也想尝试此解决方案:

JS:

  data:{typesArray:types}
 

PHP:

  $ types = $ _REQUEST ['typesArray'];