2014-07-09 4 views
-1

Когда форма отправлена, я предотвращу действие по умолчанию и вместо этого сделаю ajax-вызов с данными POST. Как я могу получить все данные, чтобы я мог передать их вместе с моим вызовом ajax?Получите пары значений ключа формы при отправке с помощью ajax

Когда элемент формы отправляется обычно с помощью метода post, он легко собирает все пары name => value в форме. К сожалению, теперь, когда я делаю ajax, похоже, мне нужно собрать это самостоятельно. Я действительно не хочу писать JS, чтобы пропустить форму и построить собственный хеш, я предполагаю, что есть более простой способ с jQuery или каким-то поведением, о котором я не думаю.

JS скрипка пример формы, где мне понадобятся все значения. http://jsfiddle.net/rm9KD/

+1

Обычно $ (форма) .serialize(); делает трюк. Он возвращает данные формы в строке запроса, которую вы можете отправить на сервер. –

+0

Я только что нашел это - так полезно. Спасибо, Грег! –

ответ

1

Использование JQuery serialize()

$.ajax({ 
     url: url, 
     data: $("form").serialize() 
    } 
); 

Как вы не предоставили специальный код, это просто пример для вас, чтобы заполнить

+0

Downvoter: Пожалуйста, объясните, что вы будете делать вместо этого? –

+0

был не мной, но ... я бы голосовал, чтобы закрыть вместо этого –

+0

@Kevin B: Уже закрыто :) Не уверен, почему downvote все же. Простой вопрос. Простой ответ. Go figure :) –

0

jQuery предоставляет функцию serializeArray, которая сериализует данные формы в массив. Затем вы можете взять результирующий массив и создать объект данных из него.

var arrayData = $('#myForm').serializeArray(), 
    data = {}, 
    i = 0; 
for(; i < arrayData.length; i++) { 
    data[arrayData[i].name] = arrayData[i].value; 
} 

В качестве альтернативы, JQuery предусматривает serialize функции, которая обеспечивает последовательную строку данных формы.

var data = $('#myForm').serialize(); 
+0

Почему serializeArray() вместо serialize()? Можно ли просто использовать строку из serialize() в поле данных ajax? –

+0

@DonnyP Также можно использовать 'serialize', но если вы хотите манипулировать данными перед отправкой,' serialize' делает это немного сложнее, потому что это строковое значение вместо объекта. – Kyle

+0

Может ли провидец прокомментировать, как я мог бы улучшить этот ответ? Это вполне жизнеспособный ответ, так как он обеспечивает два разных способа выполнить то, что запросил ОП. – Kyle

0

http://jsfiddle.net/WfrM4/

$(document).ready(function() { 
    $('form').submit(function (e) { 
     // Dont trigger a page load on submit. 
     e.preventDefault(); 

     // Get all the values of the form??? 
     var form_data = $('form[name="my_awesome_form"]').serialize() 

     // Make an ajax call 
     $.ajax({ 

      url: "/ajax_form_receiver", 
      data: form_data 
     }); 
    }); 
}); 
+0

Если я могу сделать одно предложение, чтобы улучшить это: вы уже привязываете это к событию формы 'submit'. Вместо '$ ('form [name =" my_awesome_form "]')', вы можете использовать '$ (this)'. Нет необходимости проходить через DOM, когда у вас уже есть ссылка на то, что вы хотите. – Kyle

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