2010-05-13 4 views
1

У меня есть головоломка. У меня есть форма, которая имеет множество полей. Существует одно поле для ссылок, в которое вы вводите ссылку, нажмите кнопку «Добавить», и ссылка (используя jQuery) добавляется в link_array. Я хочу, чтобы этот массив отправлялся через метод jQuery.ajax при отправке формы. Если я посылаю link_array с помощью $ .ajax, как это:Отправка данных jQuery.ajax одновременно с формой submit

$.ajax({ 
     type: "POST", 
     url: "add_stock", 
     dataType: "json", 
     data: { "links": link_array } 
     }); 

когда кнопка добавить ссылку выбран данных не идет никакой проблемы в правильном месте и получает положить в БД правильно. Если я привяжу вышеуказанную функцию к кнопке формы отправки, используя $ (# stock_form) .submit (..... тогда отправляются остальные данные формы, но не link_array.

Я, очевидно, могу передать массив ссылок вернитесь в скрытое поле в HTML, но тогда мне придется распаковать массив в отдельные значения запятой и разбить разделяемую запятыми строку на PHP. Кажется, что на 100% проще распаковать массив Javascript на PHP без какой-либо другой суеты.

Итак, как же это, что вы можете отправить массив из JavaScript с помощью $ .ajax одновременно с остальными данными $ _POST в HTML?

Пожалуйста, обратите внимание, что я использую рамки Кохана 3.0, но на самом деле, что не должен не делай различия ce, то, что я хочу сделать, это добавить этот массив js к массиву $ _POST, который уже идет.

Спасибо!

ответ

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

+0

Эй, TJ, большое спасибо за варианты. отличный ответ. вы дали мне хорошую информацию. надеюсь, что кто-то еще найдет это полезным когда-нибудь. ура! – dscher

+0

Интересным дополнением к этому может быть следующее: http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of-the-same-name - Кажется логичным передать ссылки на мой PHP-скрипт как массив, как показано в ответе Джонатана Сампсона. – dscher

0

вы лучше удачи с помощью JQuery-х serializeArray или serialize function, а затем добавить в дополнительных полей, которые вы имеете, и, наконец, отправить данные POST с .ajax.

Смежные вопросы