У меня есть что-то вроде загадки. У меня есть форма, которая имеет многочисленные поля. Существует одно поле для ссылок, где Вы вводите ссылку, нажмите добавить кнопку, и ссылка (использующий jQuery) добавляется к link_array. Я хочу, чтобы этот массив был отправлен с помощью jQuery.ajax метода, когда форма отправлена. Если я отправляю link_array с помощью $ .ajax как это:
$.ajax({
type: "POST",
url: "add_stock",
dataType: "json",
data: { "links": link_array }
});
когда добавить кнопка ссылки выбрана, данные не переходят без проблем к корректному месту и вставляются в дб правильно. Если я связываю вышеупомянутую функцию с кнопкой отправки формы с помощью $ (#stock_form) .submit (..... затем остальная часть данных формы отправляется, но не link_array.
Я могу, очевидно, пасовать назад массив ссылки в скрытое поле в HTML, но затем я должен был бы распаковать массив в запятую отдельные значения и разбить разделенную от запятой строку в PHP. Просто кажется 100X легче распаковать массив JavaScript в PHP без другой суеты.
Так, как получается, что можно отправить массив от JavaScript с помощью $ .ajax параллельный к остальной части $ _POST данные в HTML?
Обратите внимание на то, что я использую платформу Kohana 3.0, но действительно который не должен иметь значения, что я хочу сделать, добавляет этот массив js к $ _POST массив, который уже идет.
Спасибо!
Если вы действительно хотите отправить форму (например, с обновлением страницы и всем остальным), ваш единственный вариант - добавить серию < input type = 'hidden'>
полей в форму с именем links
и заполните каждое из них одним из значений из массива. Тогда то, что вы получите на другом конце, будет, по сути, тем, что вы получите с помощью приведенного выше вызова $. Ajax
.
Если вы просто хотите отправить данные на сервер, но на самом деле вам не нужно отправлять форму, вы можете использовать serialize
в форме, чтобы получить для нее строку в кодировке URL, затем добавьте свои ссылки в конец строки и отправьте их через ajax
. Что-то вроде этого:
// Assuming 'link_array' is present
var data, n;
data = [$('#TheFormID').serialize()];
for (n = 0; n < link_array.length; ++n) {
data.push("links=" + encodeURIComponent(link_array[n]));
}
$.ajax({
type: "POST",
url: "add_stock",
dataType: "json",
data: data.join("&")
});
Мы получаем начало строки в кодировке URL из serialize
, инициализируем им массив, затем вставляем закодированные поля для каждой ссылки на нем. Затем мы используем Array # join
, чтобы собрать все это в одну строку для отправки с вызовом ajax
. (Вы можете сделать это с помощью строкового конкатенации, если хотите, но построение этих длинных строк с помощью массива происходит быстрее после определенного количества элементов и заставляет все "помещать ли я на него &
или нет "тоже выпадают естественно.)
Вам повезет больше, если вы воспользуетесь функцией jQuery serializeArray
или serialize
, а затем добавите дополнительные поля, которые у вас есть, и, наконец, отправите данные POST с помощью .ajax
.