Ошибка при отправке массива в массив с использованием AJAX

Я пытаюсь передать массив в массив через 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) "[]" }

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

Заранее спасибо.

0

Решение

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

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

var settings = [];

чтобы:

var settings = {};
2

Другие решения

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

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

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
}
});

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector