将用户均匀地重定向到18个不同的页面并确认提交

时间:2013-11-07 02:18:17

标签: javascript php html redirect evenly

遇到设计问题,并希望得到一些建议。

我期待540名参与者完成18项调查。每项调查应该有30名参与者(完成/提交调查 - 不仅仅是访问调查)。这些调查非常相似(结构相同;只有一些措辞/图像不同。可以从相同的html中得出)。

我以前的方式是只托管一个html,并在html / JavaScript中有一个随机数生成器。当请求页面时,将生成1到18之间的随机数,并根据该数字生成18个调查中的一个并返回给参与者。这是非常方便的,我只需要维护一个html页面,并担心根据给定的数字生成不同的调查。但是我注意到参与者的分布并不完全均匀 - 我可能在一次调查中有25名参与者,在另一次调查中有35名参与者。这可能是由于来自随机数发生器的随机性(我假设我无能为力 - 如果我错了,请纠正我。)

我正在寻找更好的解决方案。我想在服务器端有一个计数器,并根据计数重定向参与者(例如,每个第一个参与者进入第一次调查,每个第二个参与者进入第二个调查......每个第18个参与者进入第18个调查) 。然而,这只能保证参与者均匀地访问调查,而不是完成/提交调查 - 参与者可以完全增加计数但不完成调查。如果他不提交调查,则不应增加计数。但如果计数没有增加,他(和后续参与者)就无法进行调查。锁定柜台是不现实的,因为有很多参与者等着获得一个号码,因此调查......啊我需要一些帮助@。@。

任何解决方案/建议?

预先感谢您的回复!

3 个答案:

答案 0 :(得分:0)

您的服务器端计数器的想法很棒。要解决人们未完成调查的问题,请使用cookie或某种登录系统,参与者需要在其中识别自己(我认为这是匿名调查,因此cookie更好)。

  1. 在服务器端有一个计数器。
  2. 当用户到达时,为他们设置一个带有调查ID的cookie,从柜台计算出来(1-18),这样你就能记住用户所属的调查。
  3. 当用户到达时,检查带有ID的cookie - 如果他们有cookie,请将其发送到适当的调查而不增加计数器。如果他们不这样做,请递增计数器并为用户设置一个带有新ID的cookie。
  4. 怎么想? :)

答案 1 :(得分:0)

这个怎么样:

为每个调查创建单独的计数器,并将它们存储在数据库中。每次用户请求调查时,从数据库中获取计数器,迭代它们,并返回计数为< 30.将用户重定向到所述调查,并增加该调查计数器。

为确保实际提交调查,您可以执行以下操作:在数据库中创建另一个表。每次为用户提供调查时,请在包含以下内容的表格中插入新记录:unique_id, survey_id, timestamp。将unique_id与调查一起传递给用户,并在提交后从数据库中删除关联的条目。现在,在选择调查之前(如上所述),您可以获取此数据,以及任何时间戳为>的条目。 10分钟前,你可以假设它没有提交,并且减少了调查结果。

答案 2 :(得分:0)

鉴于此 A ::您有18个调查需要由540名参与者随机填写,每次调查完全分为30份提交 B:您只托管一个html文件,根据服务器发送的号码通过javascript生成18个调查中的1个

不知道你如何存储调查结果我会说一个好的策略可能是: 在BE上保留序列号1-540的随机数组(用作每个调查的id)和从0开始的指针。当参与者请求页面时,为它们分配数组中的下一个数字并递增指针。使用cookie将该号码保留给该用户,以便他们始终看到相同的号码。根据该数字为他们分配调查,1-30是调查1等。

这将确保如果您期望540位访问者,则每位访问者将随机获得540次调查中的一次。如果他们再次访问,他们仍会收到相同的调查。

如果您想要处理超过540的其他用户,请求该页面能够接收旧用户从未提交过的调查,您可以将指针增加到540,但使用模运算符。

nextSurveyId = randomSurveyIDs [surveyPointer%540]; surveyPointer ++;

这将确保首先重新分配最早的指定调查。您还可以按编号维护已完成调查的单独字典,以便在从原始数组中选择下一个随机surveyId时进行检查,增加指针直到您确定要重新分配的下一个最旧的不完整调查。当两个阵列具有相同的长度时,所有调查都已提交。