Ошибка при отправке массива в массив с использованием AJAX - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь передать массив в массив через ajax. Если я не передам дополнительный массив, он работает просто отлично.

Например:

var settings = [];
// add stuff to the array

$.ajax({
    type: 'POST',
    url: "api/update-settings",
    data: {
        userId: 1,
        userSettings: settings
    },
    done: function(response) {
        //do something with the response
    },
    fail: function() {
        // do error stuff
    }
});

Отправка не будет работать. API (в PHP) получает код и может сказать мне, что такое userId, но userSettings не определено.

Примечание: неопределенный индекс: userSettings в /api/update-settings.php on строка 9

Однако, если я установлю переменную settings в качестве другого типа данных (например, int или string), индекс больше не будет неопределенным.

В PHP, когда я выкидываю запрос, чтобы посмотреть, что в нем, userSettings не найден:

var_dump($_REQUEST);
Output: array(1) { ["userId"]=> string(1) "1" }

Я добавляю элементы в свой массив, используя settings['template'] = template;

Прежде чем отправить запрос ajax, я могу записать его в консоль и получить следующее:

[p: "setting1", s: 1587, emp: "setting2", ems: 3245, template: "", …]

который содержит все данные, которые мне нужны.

Я пытался упорядочить данные с помощью JSON.stringify(settings), но затем ajax передает пустой массив:

array(2) { ["userId"]=> string(1) "1" ["userSettings"]=> string(2) "[]" } 

Я чувствую, что это что-то простое, но я не могу понять это. И да, я провел свои поиски - я нашел похожие вещи, но ни один из ответов, похоже, не помог.

Спасибо, заранее.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Учитывая способ добавления значений к переменной settings, вы хотите манипулировать / отправлять объект, а не массив.

Вам нужно изменить декларацию с:

var settings = [];

до:

var settings = {};
0 голосов
/ 08 ноября 2018

Вы пробовали сериализовать массив? Вы можете найти этот подход здесь , здесь и здесь .

так что это может закончиться как

var settings = [];
// add stuff to the array

$.ajax({
    type: 'POST',
    url: "api/update-settings",
    data: {
        userId: 1,
        userSettings: JSON.stringify(settings);//here is the change
    },
    done: function(response) {
        //do something with the response
    },
    fail: function() {
        // do error stuff
    }
});

надеюсь, это поможет.

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