2011-10-25 69 views
1

我有一个基于名字和姓氏表单字段搜索人员记录的先行表单字段。字段由Jquery发布,人员列表以JSON形式返回并且结果显示为表格。为每个关键事件提交发布请求。但我有这个问题。Spring MVC - JSON响应 - 如何防止

可以说,用户在名字字段中输入'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); 
} 

回答

0

也许你可以时间戳添加到您的返回的JSON值。并在您的jQuery比较最新的时间戳收到实际。

+0

感谢您的回复WarfarA .. JSON响应是Person对象的列表。如何为此响应添加额外的变量? – RKodakandla

0

很多,你在网络上看到的前瞻/自动完成的表格有(在PengoWorks jQuery的自动完成功能这是minChars,例如)字符的“阈值计数”。 如果您使用的是jQuery插件,您还可以使用delay选项指定在发送AJAX请求之前要等待的毫秒数。

如果使用的是典型的minChars值,如3,再加上也许100ms的合理delay值,你可能会“缩小”的搜索空间不够没有与一个结果“超车”另一个任何问题。

你可以尝试玩这些值here

编辑:同样的选项jQueryUI可供选择 - 他们被称为minLengthdelay