0

在这个railscast 中,我们的好朋友 Bates 先生介绍了一个解决方案来创建一个可以对一组数据进行搜索、排序和分页的应用程序。在进行 AJAX 搜索时,他提供了一个解决方案,该解决方案将在用户在搜索框中输入输入时显示搜索结果。这是他的解决方案:

$('#products_search input').keyup(function () {
  $.get($('#products_search').attr('action'), ↵ 
    $('#products_search').serialize(), null, 'script');
  return false;
});

但是他说“请注意,这只是一个快速演示,并不是最好的方法。如果您在生产应用程序中执行类似的操作,可以使用几个 jQuery 插件。” 我正在寻找他为什么认为这不适合生产的解释。提前致谢!

4

1 回答 1

1

我看到这个解决方案有两个主要问题。第一个是每次按下键时都会发出 HTTP (AJAX) 请求,这不是最有效的方法。第二个是您基本上eval是在响应中调用,这eval是不好的,因为它可能导致恶意用户执行您不想执行的代码。

一些改进建议:

  • 使用适当的 JSON 解析器并将数据作为 JSON 传回。(你可以使用$.getJSON
  • 限制请求 - 不要在每个 keyUp 上都这样做,可能会启动一个计时器,并且仅在最后一秒没有按下任何键时才提交请求,这意味着它不会为快速打字的人打很多电话。
  • 缓存响应。如果您已经搜索过某些东西,那么两次获取数据是没有意义的。记下(在 JS 对象中)本次会话中的先前调用及其结果。
于 2012-04-27T09:17:19.293 回答