2

好的,我的问题很简单,

我的应用使用 Play 框架 2.1 运行,有时我需要使用 jQuery 发出几个完全独立的 ajax 请求。

像这样的东西:

$.get('/url1', function(res){ ... });
$.get('/url2', function(res2){ ... });

在我的 Play 控制器中,我只是在做:

public Result foo(){
    theObject = // retrieving the object...
    return ok(Json.toJson(theObject));
}

发生的情况是有时(并非总是如此,这就是为什么它很奇怪),服务器返回我需要的东西。而其他时候,它在两个回调中给了我相同的结果,就好像最后一个请求覆盖了第一个请求的结果一样。

我认为这是一个 jQuery 问题,但是当我在我的 Play 控制器中记录结果时,在返回它之前,它告诉我有时,第一个 url 从未被调用,第二个被连续调用两次(反之亦然,和随机...)。

我正在使用 MongoDB 作为数据库。

似乎 Play 正在使用相同的线程来处理请求或类似的东西......

你怎么看待这件事 ?jQuery 吗?播放框架?蒙哥?谁有罪?

提前致谢 !

编辑:我只是尝试在 setTimeout() 回调中进行第二次调用,延迟为 ...0 毫秒,结果是结果很好,似乎不再有冲突......但是,你会明白我不能将我所有的调用都包装在一个单独的 setTimeout() 回调中......为什么这不会再发生零毫秒超时?这是一个闭包/javascript上下文问题吗?

4

1 回答 1

2

在我的团队中,我们遇到了同样的问题,并在 Play 问题上发现了一个非常相似的问题: https ://github.com/playframework/playframework/issues/1383

到目前为止,该问题的解决方案为我们解决了问题:

播放动作是有状态的,每个请求必须实例化一次。默认情况下,bean 在 Spring 中是 > 单例的。您需要将它们配置为原型。

于 2013-09-19T13:36:54.093 回答