JQuery AJAX пост меняет символы в данных поста - PullRequest
1 голос
/ 18 октября 2019

Я использую jQuery post для публикации значений флажков в другом файле, я знаю, что страница работает и логика верна, потому что, когда я не использую jQuery post, страница работает нормально, проблема в том, что она, похоже, портит массиви поэтому заставляет его работать некорректно

Мое поле radio использует следующие поля формы:

<input type="checkbox" name="radio[]" value="<? print $id; ?>">

Которое при публикации на следующей странице обрабатывается

if ($_POST['radio']){
    foreach($_POST['radio'] as $val) {

Это то, что публикуется, когда я получаю как обычную форму отправки, используя print_r($_POST);

Array (
    [radio] => Array (
        [0] => 13
        [1] => 12
    )
    [ros] => sell
    [submit] => submit
)

Это работает нормально, проблема в том, что это не работает в jQuery AJAX, поэтому я могу обрабатывать данные безКогда я отправляю форму с помощью jQuery AJAX, мне нужно обновить данные, которые выглядят так:

Array (
    [ros] => sell
    [submit] => submit
    [radio] => radio %5B %5D=15&radio%5B%5D=14&ros=sell
)

Это мой пост-скрипт jQuery AJAX:

function submitgarage() {
    var submit = $("input[name=submit]").val();
    var ros = $("#ros option:selected").val(); 
    var radio = $("#garageform").serialize();
    $.post("ajax/vehicles/garage.php", { ros: ros, submit: submit, radio: radio },
    function(data) {
        $('#results').html(data);
    });
}

Как вы можете видетьдобавляет %5B %5D и т. д., я попытался использовать utf8_decode, вызвал ошибку сервера 500, попытался использовать urldecode, который, как я подозревал, не сработает, и я был прав, я просто не могу показатьсячтобы отправить его так же, как раньше.

Я проверил другие темы по переполнению стека для того же рода вещей и, похоже, не смог найти решение.

Ответы [ 2 ]

1 голос
/ 18 октября 2019

AJAX jQuery сериализует данный объект данных, но вы уже сериализовали радио-поле, поэтому вы дважды сериализуете его.

Ваша переменная radio должна быть массивом, а не сериализованными данными.

var radio = $("#garageform [name='radio[]']:checked").get().map(function(e) {
    return e.value;
});
0 голосов
/ 18 октября 2019

с parse_str это довольно хорошо работает с вашим примером:

parse_str("radio %5B %5D=15&radio%5B%5D=14", $jqarr);
print_r($jqarr); // Only for print array   

Array
(
    [radio_] => Array
        (
            [0] => 15
        )

    [radio] => Array
        (
            [0] => 14
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...