Отправка jQuery.ajax данные, одновременные к форме, отправляет

У меня есть что-то вроде загадки. У меня есть форма, которая имеет многочисленные поля. Существует одно поле для ссылок, где Вы вводите ссылку, нажмите добавить кнопку, и ссылка (использующий 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 массив, который уже идет.

Спасибо!

1
задан dscher 13 May 2010 в 06:45
поделиться

2 ответа

Если вы действительно хотите отправить форму (например, с обновлением страницы и всем остальным), ваш единственный вариант - добавить серию < 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 . (Вы можете сделать это с помощью строкового конкатенации, если хотите, но построение этих длинных строк с помощью массива происходит быстрее после определенного количества элементов и заставляет все "помещать ли я на него & или нет "тоже выпадают естественно.)

2
ответ дан 3 September 2019 в 00:35
поделиться

Вам повезет больше, если вы воспользуетесь функцией jQuery serializeArray или serialize , а затем добавите дополнительные поля, которые у вас есть, и, наконец, отправите данные POST с помощью .ajax .

0
ответ дан 3 September 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: