Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui 只有在本地构建的数组中找不到结果时,才在jquery自动完成中使用ajax调用_Jquery Ui_Jquery_Jquery Plugins - Fatal编程技术网

Jquery ui 只有在本地构建的数组中找不到结果时,才在jquery自动完成中使用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

在我的web应用程序中,我正在显示股票的价格。我正在使用jquery autocomplete显示期权,同时将股票名称居中。但我已经构建了javascript数组的本地副本。我想显示这个本地数组中的选项,如果在本地数组中找不到搜索词,那么必须进行ajax调用以从服务器端获取列表

谢谢

     //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解决方案中实现同样的功能。谢谢大家!!!: