Мне нужно отправить строку JSON, содержащую список из 1 или более значений из формы множественного выбора.В предложенном мной решении JQuery я получаю все значения, выбранные в списке, но они возвращаются в виде отдельных параметров.
$(document).ready(function() {
$("#fooForm").submit(function(event) {
event.preventDefault();
var $form = $(this),
loc = $form.find('input[name="location"]').val(),
url = $form.attr('action'),
keys = $('#people :selected').map(function(){return $(this).val();}).get();
$.post(url, {people:keys, location:loc},
function(data) {
$("#result").html(data);
}
);
});
});
<form id="fooForm" method="" action="/api/people/location">
<input type="hidden" name="location" value="{{location}}" />
<select id="people" multiple size=4>
<option value="{{a.key}}">{{a.name}}</option>
<option value="{{b.key}}">{{b.name}}</option>
<option value="{{c.key}}">{{c.name}}</option>
<option value="{{d.key}}">{{d.name}}</option>
</select>
<input type="submit" value="Submit" />
</form>
Это дает следующие параметры, если, скажем, три человекаselected:
location 91.001,-11.23
people[] agxzdXBlcmxhcnAtc2ty_foo
people[] agxzdXBlcmxhcnAtc2ty_spam
people[] agxzdXBlcmxhcnAtc2ty_eggs
Я ожидаю, что будет один параметр people, содержащий три ключевых значения.
UPDATE Вот самое элегантное решение, которое я нашелс:
$(document).ready(function() {
$("#fooForm").submit(function(event) {
event.preventDefault();
var dataToBeSent = $("#fooFoorm").serialize();
var url = $("#fooForm").attr('action');
$.post(url, dataToBeSent,
function(data) {
$("#result").html(data);
}, "json"
);
});
});
<form id="fooForm" method="" action="/api/people/location">
<input type="hidden" name="location" value="{{location}}" />
<select name="people" multiple size=4>
<option value="{{a.key}}">{{a.name}}</option>
<option value="{{b.key}}">{{b.name}}</option>
<option value="{{c.key}}">{{c.name}}</option>
<option value="{{d.key}}">{{d.name}}</option>
</select>
<input type="submit" value="Submit" />
</form>