我正在使用 jQuery 制作搜索过滤器菜单。此表单包含多个表单元素,例如复选框和输入框。当用户对表单进行一些更改并单击#apply-filters
按钮时,表单将被隐藏,其数据将通过 发送到服务器后端进行处理$.post()
。
如果用户对表单进行了更改但没有单击#apply-filters
按钮就将其关闭,则过滤器菜单div
将被隐藏,并且下次用户重新打开过滤器菜单时,将显示初始设置,而不是用户所做的最新设置但未能点击#apply-filters
。
问题:在 jQuery 中执行此操作的最佳方法是什么?
HTML
<form id="filter-menu">
<input type="checkbox" id="free" name="free" /><label for="free">Free</label>
<input type="checkbox" id="sale" name="sale" /><label for="sale">Sale</label>
<input type="checkbox" id="rooms_1" name="rooms[]" value=1/><label for="rooms_1">1 Room</label>
<input type="checkbox" id="rooms_2" name="rooms[]" value=2 /><label for="rooms_2">2 Rooms</label>
<input type="text" id="price" val="100" />
<button id="apply-filers">Apply Filters</button>
</form>
jQuery
$('#apply-filters').click(function() {
$('#filter-menu').serializeArray(); // Gives an empty array
$.post('api/someplace',
{ free: 1,
sale: 1,
rooms: [1, 2],
price: 100
}, function() {
console.log('yay');
});
});
更新
当我做
JSON.stringify($('filter-form').serializeArray())
我明白了
[{"name":"rooms[]","value":"1"},{"name":"rooms[]","value":"2"}]"
但是我想通过$.post()
like将它发送到服务器端
{rooms: [1,2]}
这样我就可以在服务器端做(PHP,在使用框架函数处理之后)
$rooms = implode(',', $rooms_array) // gives `1,2`
MySQL查询可以像
SELECT .... WHERE rooms IN (1,2)
这可能吗?发送到服务器端的好方法是什么?另外,我将如何使用输出serializeArray()
来馈入$.post()
?