Javascript 将动态XML url转换为普通HTML

Javascript 将动态XML url转换为普通HTML,javascript,jquery,xml,jsonp,Javascript,Jquery,Xml,Jsonp,我有一个脚本,可以显示谷歌的建议: $(document).ready(function() { $("input#searchbox").autocomplete({ source: function(request, response) { $.ajax({ url: 'http://query.yahooapis.com/v1/public/yql', dataType: 'JSONP', da

我有一个脚本,可以显示谷歌的建议:

$(document).ready(function() {

$("input#searchbox").autocomplete({ 

   source: function(request, response) {

        $.ajax({

          url: 'http://query.yahooapis.com/v1/public/yql',

          dataType: 'JSONP',

          data: {

            format: 'json',

            q: 'select * from xml where url="http://google.com/complete/search?hl=nl&output=toolbar&q=' + encodeURIComponent(request.term) + '"'

          },

          success: function(data) {

          if (typeof data == 'string') data = $.parseJSON(data);

              response($.map(data.query.results.toplevel.CompleteSuggestion, function(item) {

              return { label: item.suggestion.data, value: item.suggestion.data };


            }));

          }

        });          
   }       

 }); 
});
这是小提琴:


问题是,它必须调用YahooAPI,它的响应速度很慢,有时甚至根本没有。那么,有没有办法在没有雅虎电话的情况下提出建议?

你确定是雅虎的反应太慢了吗?我试过小提琴,雅虎的回应通常是40毫秒左右。大部分延迟似乎来自jQuery在第一时间等待发送请求。自动完成的默认延迟为300ms。尝试将autocomplete选项中的delay属性设置为一个较低的值。哦,是的,并且您肯定应该将以下选项添加到ajax选项中-cache:true,jsonpCallback:'somefunctionname'。无论您为回调名称设置了什么,这只是为了使结果可缓存。yahoo对给定查询字符串的结果不太可能经常更改。这样,如果有人输入相同的字符串两次,结果将从缓存加载(直到过期),而不是再次调用Yahoo。这将给您带来另一点性能提升。还有一件事:在Ajax调用之前,在request.term上调用toLowerCase()。看起来雅虎的结果不区分大小写。因此,与再次调用Yahoo相比,将所有术语小写会增加从缓存加载结果的可能性。