好吧,我的问题很简单,
我的应用程序使用 Play 框架 2.1 运行,有时我需要使用 jQuery 发出多个 ajax 请求,这些请求完全独立。
类似这样的事情:
$.get('/url1', function(res){ ... });
$.get('/url2', function(res2){ ... });
在我的 Play Controller 中,我正在做:
public Result foo(){
theObject = // retrieving the object...
return ok(Json.toJson(theObject));
}
有时(并非总是如此,这就是为什么它很奇怪),服务器会返回我需要的内容。而其他时候,它在两个回调中给我相同的结果,就好像最后一个请求覆盖了第一个请求的结果。
我认为这是一个 jQuery 问题,但是当我在 Play Controller 中记录结果时,在返回它之前,它向我显示有时第一个 url 从未被调用,而第二个 url 被连续调用两次(并且反之亦然,并且随机......)。
我使用 MongoDB 作为数据库。
Play 似乎正在使用相同的线程来处理请求或类似的事情......
你对此有何看法? jQuery?玩框架?蒙戈?谁有罪?
提前致谢!
编辑: 我只是尝试在 setTimeout() 回调中进行第二次调用,延迟为...0毫秒,其结果是结果好并且似乎不再有冲突... 但是,您会明白我无法将所有调用包装在单独的 setTimeout() 回调中...... 为什么这种情况在零毫秒超时后不再发生?这是闭包/javascript 上下文问题吗?
最佳答案
在我的团队中,我们遇到了同样的问题,并在 Play 问题上发现了一个非常相似的问题: https://github.com/playframework/playframework/issues/1383
该问题的解决方案到目前为止已经为我们解决了问题:
Play Actions are stateful, and must be instantiated once per request. By default, beans are > singleton in Spring. You need to configure them to be prototype.
关于jquery - 玩框架,jquery ajax调用冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841441/