【发布时间】:2020-02-12 21:31:16
【问题描述】:
我试图在键上创建一个搜索引擎以从数据库返回结果,但如果已键入短语以从对象中提取结果而不是从数据库中提取结果
例如:当您输入“BMW 300”时,将从数据库中提取数据并将短语和结果保存在对象中,对象将如下所示
object {
b: (4) […]
0: Object { name: "BMW"}
1: Object { name: "BMW 300"}
2: Object { name: "BMW XS"}
3: Object { name: "BMW Z 500"}
bm: (4) […]
0: Object { name: "BMW"}
1: Object { name: "BMW 300"}
2: Object { name: "BMW XS"}
3: Object { name: "BMW Z 500"}
bmw: (4) […]
0: Object { name: "BMW"}
1: Object { name: "BMW 300"}
2: Object { name: "BMW XS"}
3: Object { name: "BMW Z 500"}
"bmw 3": (1) […]
0: Object { name: "BMW 300"}
"bmw 30": (1) […]
0: Object { name: "BMW 300"}
"bmw 300": (1) […]
0: Object { name: "BMW 300"}
}
如果你删除了 300 个词组变成“BMW”,现在应该从对象中提取结果,因为词组“BMW”已经被输入。
我对这两个逻辑都进行了编码,它们工作得很好,但问题是如何交换何时从对象读取以及何时从数据库读取?
// create object
var hold_results = {};
$('input[name="search"]').on('keyup', function(){
var phrase = jQuery.trim($(this).val());
if (phrase.length > 0) {
$.ajax({
type: "POST",
url: 'index.php?route=product/newsearch',
data: 'phrase='+phrase,
success: function(data) {
if (data.length != 0) {
// push phrase and currect results in object
hold_results[phrase] = data;
$.each(data , function(key, value){
if (value != '') {
html = '<li><a href="'+value.href+'">'+value.name+'</a></li>';
$('#search-results').append(html);
}
});
}
}
});
}
// should pull results from object here if phrase exist
$.each(hold_results , function(key , value){
if (key == phrase) {
$.each(value, function(k , v){
html = '<li><a href="'+v.href+'">'+v.name+'</a></li>';
$('#search-results').append(html);
})
}
});
});
【问题讨论】:
-
如果您想使用缓存结果,请使用 GET 请求,这是从服务器或数据库读取信息的标准方法。此外,GET 请求支持缓存,但 POST 不支持。作为参考阅读这个答案stackoverflow.com/a/17104536/6009502