我需要POST一个JSON字符串,其中包含来自多选表单的一个或多个值的List。在我提出的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>
如果选择了三个人,则会产生以下参数:
location 91.001,-11.23
people[] agxzdXBlcmxhcnAtc2ty_foo
people[] agxzdXBlcmxhcnAtc2ty_spam
people[] agxzdXBlcmxhcnAtc2ty_eggs
我希望有一个包含三个键值的人员参数。
更新 这是我提出的最优雅的解决方案:
$(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>
答案 0 :(得分:1)
在参数中发送列表的标准方法是对列表中的每个项使用一个参数(然后将其命名为param“whatever []”以表示它是列表)。
另外,你真的应该使用SELECT的名字,而不是id;你不应该在页面上有多个具有相同ID的元素,而name实际上是“命名”表单数据的属性。
执行您尝试执行的操作的更简单方法是使用jQuery serialize方法。这可以让你做到:
keys = $("#fooForm").serialize()
但是,我非常肯定会做多个参数的事情,所以如果你真的必须有一个参数,那么你就会遇到这样的问题:
keys = ""
$('#people :selected').each(function(){
keys += $(this).val() + ",";
});
// Strip off the trailing comma if present
答案 1 :(得分:0)
也许用逗号加入keys数组?