Передавать массивы как параметры с помощью jQuery AJAX? - PullRequest
6 голосов
/ 06 октября 2009

У меня есть вызов AJAX в следующем формате:

$.get('/controller/method/',
  {
    parameter1: value1,
    parameter2: value2
  },
  function(data) {
    if (data) {
    }
  else {
  }
});

Можно ли передать массив в качестве параметра?

parameter3: new Array(1, 2, 3)
parameter4: new Array('one' => 1, 'two' => 2, 'three' => 3)

Ответы [ 4 ]

9 голосов
/ 06 октября 2009

Вероятно, вам понадобится назвать вашу переменную как "parameter3 []" для PHP:

$.get('/controller/method/',
  {
    "parameter1": "value1",
    "parameter2": "value2",
    "parameter3[]": ["a","b","c"]
  },
  function(data) {
    if (data) {
    }
  else {
  }
});

$ _ GET ["parameter3"] появится в PHP как

Array
(
    [0] => "a"
    [1] => "b"
    [2] => "c"
)
0 голосов
/ 06 октября 2009

Итак, во-первых, я думаю, что вы смешиваете синтаксис JavaScript и PHP. Вероятно, это то, что вы хотели сделать, чтобы продемонстрировать проходящие массивы:

    $.get('foo.htm',
      {
        parameter1: 'value1',
        parameter2: 'value2',
        parameter3: [1, 2, 3],
        parameter4: {'one': 1, 'two': 2, 'three': 3}
      },
      function(data) {
        alert(data);
      });

Как ни странно, JQuery не нравится вложенный объект. Создает строку запроса, подобную этой:

 foo.htm?parameter1=value1
   &parameter2=value2
   &parameter3=1
   &parameter3=2
   &parameter3=3
   &parameter4=%5Bobject+Object%5D

Для PHP, передающего сложные объекты назад и вперед, я рекомендую сериализовать ваш объект JavaScript с помощью метода JSON stringify *1008* и десериализовать его в бэкэнде с помощью json_decode .

Кроме того, похоже, вы используете какой-то MVC-фреймворк. Если это CodeIgniter и у вас проблемы с GET, рассмотрите возможность использования этого вспомогательного метода postJSON:

$.postJSON = function(url, data, callback) {
    $.post(url, data, callback, "json");
};
0 голосов
/ 06 октября 2009

Я был на этом пути раньше. Объедините ваш массив с запятой (или любым другим символом, который лучше всего подойдет для вашего сценария) и отправьте его как один параметр ...

var arr = [5, "x", 25];
var parms = {
  parameter1: "value1",
  parameter2: arr.join(",");
}

А на стороне сервера ваша пост-переменная "parameter2" будет выглядеть как 5,x,25

Это простое решение для обеих сторон провода.

0 голосов
/ 06 октября 2009

Можно отправить любой объект JSON с помощью команды post ... даже на контроллер MVC. Трудной частью является получение данных ... которые вам может потребоваться десериализовать вручную на сервере (либо в контроллере, либо с помощью фильтра JSON.

Эта статья (ссылка) в значительной степени дает вам все, что нужно знать о десериализации сложного объекта в параметр для метода контроллера MVC. Прочитайте это. Работает очень хорошо.

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