Передать массив флажков в вызов AJAX - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь передать массив флажков в вызов 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'];

Массив типов работает хорошо на стороне javascript, но когда он попадает на сторону PHP, $ _POST ['types'] читается как пустое.

Почему $ _POST ['types'] читается как пустое? Есть ли что-то в вызове AJAX, где мне нужно определить, что я передаю массив вместо строки?

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Вам нужно сериализовать ваш массив, чтобы получить его в $ _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);
    }
});
0 голосов
/ 10 января 2019

Возможно, вы захотите попробовать и это решение:

JS:

data: { typesArray: types }

PHP:

$types = $_REQUEST['typesArray'];
0 голосов
/ 10 января 2019

Попробуйте использовать следующее в «data»:

$.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)));
...