Spring MVC - JSON响应 - 如何预防

时间:2011-10-25 21:03:19

标签: json jquery spring-mvc

我有一个预见表单字段,它根据名字和姓氏表单字段搜索人员记录。字段由Jquery发布,人员列表以JSON形式返回,结果显示为表格。为每个keyup事件提交发布请求。但是我遇到了这个问题。

假设用户在firstname字段中输入了“a”。该请求作为ajax调用提交。然后用户在字段中输入“b”。现在请求再次以'ab'作为名字提交。问题是,'ab'的结果数量较少,因此结果会立即显示。由于'a'有更多结果,因此需要一些时间来处理和构建结果表,一旦构建完表,它就会替换'ab'的现有表。这不是我想要的行为,因为'a'是第一个请求而'ab'是最新的请求,它不应该被取代。那么如何防止旧请求的结果取代新结果。提前谢谢!

--- ---更新

控制器方法类似于..

 public @ResponseBody List<PSPerson> getPersonsWithNames(
        @RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName) 
{

    Map<String, String> attrMap = new HashMap<String, String>();

    attrMap.put("firstName", firstName);
    attrMap.put("lastName", lastName);

    return personService.getPeople(attrMap);
}

2 个答案:

答案 0 :(得分:0)

也许您可以为返回的Json值添加时间戳。在你的jquery中,将收到的最新时间戳与实际时间戳进行比较。

答案 1 :(得分:0)

您在网络上看到的许多前瞻/自动填充表单都有“阈值计数”字符(例如,在 PengoWorks jQuery自动填充它是minChars)。 如果您正在使用该jQuery插件,您还可以使用delay选项指定在发送AJAX请求之前等待的毫秒数。

如果您使用典型的minChars值,例如3,加上合理的delay值可能为100毫秒,您可能会“缩小”搜索空间,以至于没有一个结果集“超越”另一个问题的任何问题。

您可以尝试使用这些值here

修改: jQueryUI 中提供了相同的选项 - 它们被称为minLengthdelay