Jquery ui 只有在本地构建的数组中找不到结果时,才在jquery自动完成中使用ajax调用
在我的web应用程序中,我正在显示股票的价格。我正在使用jquery autocomplete显示期权,同时将股票名称居中。但我已经构建了javascript数组的本地副本。我想显示这个本地数组中的选项,如果在本地数组中找不到搜索词,那么必须进行ajax调用以从服务器端获取列表 谢谢Jquery ui 只有在本地构建的数组中找不到结果时,才在jquery自动完成中使用ajax调用,jquery-ui,jquery,jquery-plugins,Jquery Ui,Jquery,Jquery Plugins,在我的web应用程序中,我正在显示股票的价格。我正在使用jquery autocomplete显示期权,同时将股票名称居中。但我已经构建了javascript数组的本地副本。我想显示这个本地数组中的选项,如果在本地数组中找不到搜索词,那么必须进行ajax调用以从服务器端获取列表 谢谢 //Local array var local_array=["option1","option2"]; //jqueryUI call of autocomplete functi
//Local array
var local_array=["option1","option2"];
//jqueryUI call of autocomplete function
$('#search_stock').autocomplete({
source:function(){
if(search term is found in local array)
{
show suggestion from local array.
}
else
{
make ajax call to show suggestions of stock names.
}
}
});
更新
这是实际的代码
$(function() {
var cache = {'option1':'option1','option2':'option2'}, lastXhr;
$( "#stock_rates" ).autocomplete({
minLength: 2,
source: function( request, response ) {
var term = request.term;
if ( term in cache ) {
response( cache[ term ] );
return;
}
lastXhr = $.getJSON( "stock_rates.php", request, function( data, status, xhr ) {
cache[ term ] = data;
if ( xhr === lastXhr ) { response( data ); }
});
}
});
});
jQueryUIAutoComplete的示例页面就是这个问题的一个例子 。单击该页面上的“查看源代码”链接以查看示例代码 关键部分是“源”接受参数
source: function(request, response){
您需要读取请求,或者从缓存中获取值,或者执行请求,然后调用响应函数并将匹配的值传递给它
更新
现在的问题是缓存中存储的格式错误。缓存只存储从getJSON调用返回的数据,并按搜索词索引。这取决于你做的前缀检查等
要继续您现在尝试的方式,您需要正确填充缓存
var cache = {
"o": ['option1', 'option2'],
"op": ['option1', 'option2'],
// ....
"option1": ['option1'],
"option2": ['option2']
};
否则,您可以以不同的方式存储数据,并在“source”函数中添加更多逻辑,以便对静态数组或其他对象执行前缀检查。不过,这一切都取决于您缓存的数据。jQuery UI autocomplete的示例页面中有一个正好说明这个问题的示例 。单击该页面上的“查看源代码”链接以查看示例代码 关键部分是“源”接受参数
source: function(request, response){
您需要读取请求,或者从缓存中获取值,或者执行请求,然后调用响应函数并将匹配的值传递给它
更新
现在的问题是缓存中存储的格式错误。缓存只存储从getJSON调用返回的数据,并按搜索词索引。这取决于你做的前缀检查等
要继续您现在尝试的方式,您需要正确填充缓存
var cache = {
"o": ['option1', 'option2'],
"op": ['option1', 'option2'],
// ....
"option1": ['option1'],
"option2": ['option2']
};
否则,您可以以不同的方式存储数据,并在“source”函数中添加更多逻辑,以便对静态数组或其他对象执行前缀检查。不过,这一切都取决于缓存的数据。如果要分别进行ajax调用,请使用autocomplete的搜索事件并在该事件中检查您的条件,并根据返回的true或false检查您的条件 下面是示例代码
$('#search_stock').autocomplete({
search:function(event,ui){
if(search term is found in local array)
{
return false;
}
else
{
return true;
}
}
});
如果要分别进行ajax调用,请使用自动完成的搜索事件并在该事件中检查您的条件,并根据返回的true或false检查您的条件 下面是示例代码
$('#search_stock').autocomplete({
search:function(event,ui){
if(search term is found in local array)
{
return false;
}
else
{
return true;
}
}
});
感谢你的努力和对ans的支持:我尝试了“带缓存的远程”,但它不适用于预构建的数组或javascript对象。它适用于在runtym构建缓存对象,但我也尝试过硬涂层对象,我想不出是不是working@user755255那你能给我们更多的信息吗?您是否收到任何javascript错误?您实际使用的代码是什么?尝试给出一些重现问题的代码。下面是代码段:$function{var cache={'option1':'option1','option2':'option2'},lastXhr;$stock_rates.autocomplete{minLength:2,source:function request,response{var term=request.term;if term in cache{response cache[term];return;}lastXhr=$.getJSON stock_rates.php,请求,函数数据,状态,xhr{cache[term]=data;if xhr==lastXhr{response data;}}};};}@user755255如果您使用console.logdata,它是什么?Ajax请求实际返回了吗?您对xhr的比较真的通过了吗?另外,在将来将代码粘贴到问题中。这次我对它进行了编辑。是的,ajax正在返回json数据,xhr正在传递条件。但问题的摘要是,即使要查找的股票名称存在于本地构建的对象中,它也需要ajax调用。我真的很感激你的关心,bt能不能请你尝试一下用硬编码的javascript对象自动完成用户界面插件。我在这件事上伤了脑筋,现在正试图在asp.net解决方案中实现同样的功能。谢谢大家!!!:感谢你的努力和对ans的支持:我尝试了“带缓存的远程”,但它不适用于预构建的数组或javascript对象。它适用于在runtym构建缓存对象,但我也尝试过硬涂层对象,我想不出是不是working@user755255那你能给我们更多的信息吗?您是否收到任何javascript错误?您实际使用的代码是什么?尝试给出一些重现问题的代码。下面是代码段:$function{var cache={'option1':'option1','option2':'option2'},lastXhr;$stock_rates.autocomplete{minLength:2,source:function request,response{var term=request.term;if缓存中的term{response cache[term];return;}lastXhr=$.getJSO
N stock_rates.php,请求,函数数据,状态,xhr{cache[term]=data;if xhr==lastXhr{response data;}}};}@user755255如果您使用console.logdata,它是什么?Ajax请求实际返回了吗?您对xhr的比较真的通过了吗?另外,在将来将代码粘贴到问题中。这次我对它进行了编辑。是的,ajax正在返回json数据,xhr正在传递条件。但问题的摘要是,即使要查找的股票名称存在于本地构建的对象中,它也需要ajax调用。我真的很感激你的关心,bt能不能请你尝试一下用硬编码的javascript对象自动完成用户界面插件。我在这件事上伤了脑筋,现在正试图在asp.net解决方案中实现同样的功能。谢谢大家!!!: