Передача многомерного массива через jQuery.ajax()
Допустим имеется страница с формой через которую пользователь может добавить информацию об игре - название, ссылку на картинку и ссылку на страницу игры. Блоки для добавления игры можно создавать динамически, т.е. пользователь сразу может заполнить информацию о нескольких играх. Как сразу отправить все заполненные пользователем формы, чтобы на сервере было удобно их потом использовать?
Вариант решения для отправки многомерного массива из браузера клиента через jQuesy.ajax():
var games = $('.game'); var data; data = new Object(); for (i = 0; i < games.length; i++) { data['games[' + i + '][name]'] = $(games[i]).find('.game-name').val(); data['games[' + i + '][img]'] = $(games[i]).find('.game-img').val(); data['games[' + i + '][url]'] = $(games[i]).find('.game-url').val(); } $.ajax({ url: 'games.php', type: "POST", data: data });
Далее на сервере обрабатываем массив полученных игр:
foreach($_POST['games'] as $id => $game) { ... }
Комментарии
Огромное спасибо за данное решение, красиво, изящно!
Очень полезная штука
Ребята спасайте! Я не очень то разбираюсь во всем этом, но мне очень очень нужна помощь. Мне нужно найти все теги <a> на странице,отправить на сервер ссылку и ее название, и на сервере сохранить все это в базу. Вот что в данный момент у меня есть:
а вот data.php который принимает значения
Проблема заключается в том что я вызываю $.ajax стоько раз сколько найдено тегов <a>, но это даже мне, мало что понимающей, кажется не правильным. Как мне передать все данные одним запросом???
Очень надеюсь на помощь
Сейчас времени нет всё написать подробнее, но коль вы пользуетесь jQuery надо пользоваться по полной:
JS код:
Код сервера:
Ответ сервера:
Дальше уже доводите до ума код сервера - foreach вам в руки :)
Большое спасибо за статью! не один час потратил, чтобы сделать подобную вещь))
Спасибо! Помог, просто супер!
Большое спасибо! Сделал массив как нужно.
Красиво получилось, и без преобразования в json. Именно то что надо, с возможностью сохранения индекса. Сначала хотел сделать через json, но плагины, на подобие "jquery-json", индексы не учитывают; в предложенном способе - сохраняются.
спасибо БОЛЬШОЕ!!!! весь нет перелковырял... и только здесь нормально все описано!
var games = $('.game');
var data;
for (i = 0; i < games.length; i++) {
data = new Object();//здесь нельзя писать ето. Обєкт надо создавать перед циклом!
data['games[' + i + '][name]'] = $(games[i]).find('.game-name').val();
data['games[' + i + '][img]'] = $(games[i]).find('.game-img').val();
data['games[' + i + '][url]'] = $(games[i]).find('.game-url').val();
}
$.ajax({
url: 'games.php',
type: "POST",
data: data
});
Уважаемый автор статьи, нашел этот блог и решение более чем понравилось.
Однако оно не работает у меня.
Клиент:
var data; //= new Object();
for (var i = 0; i < 2; i++) {
data['games[' + i + '][name]'] = "n"+i;
data['games[' + i + '][img]'] = "im"+i;
data['games[' + i + '][url]'] = "u"+i;
}
и сервер:
foreach($_POST['games'] as $id=>$game) {
//echo "I get game #".$key.$value['name'];
}
выдает ошибку:Invalid argument supplied for foreach()
для строки foreach($_POST['games'] as $id=>$game) {
C чем это связанно? В каком направлении смотреть ? Заранее благодарю за помошь.
Я новичек, так что не судите строго=)
Решение нашел:
дело было в undefined значении переменных которые передавал в массиве javascript.
поставил переменную блокирующую присвоение значений для data(до передачи массива) с условием if(nidPt[i]===undefined)
{
NALmasProf=1;
break;
}
Идея уйти от json мне понравилась. а можно написать поподробней, ну прям с примером. Чтобы запустить, проверить и самому поковыряться (в целях самообразования). А то мне как новичку не понятно как сохранять, где php а где js
Автору огромное спасибо, выручил, полдня убил на поиски решения. Спасибо!!!!!
Отправить комментарий