2010-07-22 56 views
0

我正在一个大网站上工作,并在该网站上有一个搜索模块。搜索是通过使用大量用户提交的值完成的,因此在分页中,我必须将所有这些数据传递到下一页,并将值附加到url使url非常大。我应该使用javascript进行页面提交吗?

Sso我该如何解决这个问题?我打算使用基于JavaScript的页面提交(POST),隐藏字段中的所有值到下一页,以读取下一页中的所有值。

它会导致任何问题?或者我应该使用数据库来保持搜索标准?

+0

你有一个cookie的4K。够了吗? – mplungjan 2010-07-22 08:26:22

+0

如果我将所有用户用户提供的值存储在cookie中,它会好吗? – milan 2010-07-22 08:28:33

回答

0

为了使用分页进行可靠的搜索,我们需要做的比平常多一点。

我们需要处理以下情况。

  1. 一旦搜索完成,用户可以选择做浏览器前进和后退。在这里,如果您在每个页面上进行表单提交,这将是一个超载。另外,如果用户按下浏览器刷新按钮,则会不必要地提醒他数据正在提交。

  2. 在一个大型数据库上搜索有很多标准是昂贵的。因此,优化很重要。

所以,你应该做到以下几点:

  1. 提交关于每一页变化
  2. 数据不存储在cookie数据。 (这不安全,甚至不可靠。)
  3. 对于具有复杂查询的大型数据库,将结果缓存在会话中。
  4. 如果您需要非常及时的实时结果,请忽略点(3)并尝试对每个页面进行部分搜索。

因此,对于你的情况,你可以做到以下几点:

  1. 当用户搜索一次,使表单POST数据到一个搜索页面。
  2. 此搜索页面将在会话中存储搜索查询并为其生成唯一的ID。
  3. 现在渲染结果页面。结果页面将传递搜索ID(在点2中生成)和页码。示例result.aspx?searchId = 5372947645 & page = 2
  4. 结果页面会使用searchId查看来自会话的查询,然后根据发送的页码提供结果。
0

使用隐藏字段和POST方法应该也可以,除非您能够在下一页右侧获取它们。

0

为了补充Sarfraz的答案...

这是没有必要使用JavaScript来进行POST。

<form action="destination_url" method="POST"> 
    ... 
</form> 
+0

我的计划是在用户点击分页编号(1,2,3,4 ...)时提交页面,这些元素必须是链接,我的计划是在有人点击页面时提交页面,因为那些链接我们必须调用一个javascript函数来提交页面, – milan 2010-07-22 08:30:16

1

我想创建一个服务器端的对象,可能与后端数据库是由不同的页面更新。

这是我认为最清楚和最简单的解决方案。通过post或者javascript或者cookie来给页面提供参数也能起作用,但这对我的经验来说更是一个怪癖。

此外,如果搜索查询非常复杂以至于需要多个页面才能创建它,那么用户可以将所有数据存储在服务器上,以便他可以通过在不同的页面。

1

当初始搜索被触发时,我会在服务器上的某种会话存储中存储所有搜索标准。

对于分页,我会从会话存储检索标准,然后只显示适当的结果。此外,我还会在分页链接中添加某种关键字(因此这将是唯一隐藏的后期字段),在这种关键字下可以找到搜索标准。

即使会话是每个用户,您可能会在同一个会话中打开多个搜索窗口,但您不想将它们与分页混淆。

相关问题