我正在尝试构建一个简单的搜索功能,但我无法弄清楚为什么我的代码无效。
这是我为搜索而构建的操作:
search: function(req, res) {
var criteria = req.param('criteria');
var value = req.param('value');
Human.find().where({ criteria: value }).done(function(err, humans) {
if(err) {
return console.log('Error:' + err);
}else{
res.view({
title: 'Search',
humans: humans
});
}
});
}
我的主页上有一个带有搜索ID的按钮。我想这样做,以便每当有人点击我的搜索按钮时,它会查询数据库并返回localhost:1337 / model / search的结果。到目前为止,我已经尝试使用两个变量(条件,值)向该控制器操作发送ajax请求,但它不起作用。
这是我提交的ajax电话:
$('#search').on('click', function() {
var criteria = $('#filter').val();
var value = $('#value').val();
$.ajax({
type: 'POST',
url: 'http://localhost:1337/human/search',
cache: false,
data: {
criteria: criteria,
value: value
},
success: function(data) {
console.log('SUCCESS!');
window.location.href = 'http://localhost:1337/human/search';
},
error: function(err) {
console.log('ERROR!');
}
});
});
这是相应的观点:
<table>
<thead>
<tr>
<th>ID</th>
<th width="150">First Name</th>
<th width="150">Last Name</th>
<th width="150">Contact</th>
<th width="150">E-Mail</th>
<th>View</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
<% _.each(humans, function(model) { %>
<tr>
<td> <%= model.id %> </td>
<td> <%= model.firstName %> </td>
<td> <%= model.lastName %> </td>
<td> <%= model.contact %> </td>
<td> <%= model.email %> </td>
<td><a href="/human/view/<%= model.id %>" class="tiny button">VIEW</a></td>
<td><a href="/human/edit/<%= model.id %>" class="tiny button">EDIT</a></td>
</tr>
<% }) %>
</tbody>
</table>
答案 0 :(得分:1)
Promlem#1:当你搜索这样的模型:Human.find().where({ criteria: value })
时,你实际上是按名称“条件”搜索,而不是按字段搜索,该名称保存在{ {1}}变量。
尝试创建这样的搜索对象:
criteria
问题#2:为什么要执行ajax请求,然后重定向到同一个网址?
首先,你发出POST请求,虽然GET请求更适合搜索pupposes。当您创建资源时,通常会使用POST
其次,在ajax成功处理程序中,在您使用找到的人体模型接收到视图后,您只需将浏览器重定向到var searchObj = {};
searchObj[criteria] = value;
// and then search like you did before
Human.find().where(searchObj).done(function(err, humans) {
if(err) {
console.log('Error:' + err);
// you should return some response here:
res.send(err, 500);
}else{
res.view({
title: 'Search',
humans: humans
});
}
});
url 而不会传递任何参数,因此您的控制器将尝试按空值搜索和标准http://localhost:1337/human/search
。所以你不会看到预期的结果。
目前尚不清楚您是想通过ajax获取数据,还是只想在新的HTML页面中显示数据?
编辑:如果您不想使用ajax,请让HTML表单为您完成工作:
Human.find().where({ "": "" })
点击搜索按钮将提交表单并传递GET请求的查询字符串中的所有表单数据: <form action="human/search">
<input name="criteria" value="foo">
<input name="value" value="bar">
<button type="submit" id="search">Search</button>
</form>
当然,您可以使用javascript手动构建查询字符串,而无需使用表单,并将浏览器重定向到该URL。结果将是相同的。