2013-10-28 78 views
1

是否有可能让一个页面发送ajax请求并让另一个页面处理响应?来自一个页面的Ajax请求和另一个页面中的响应

用例是一个长时间运行的任务。用户向服务器提交ajax帖子,服务器处理作业所需的时间,可能需要几分钟,然后返回响应,但用户可能浏览了另一页面。

我想能够拥有相同的JavaScript函数来处理所有页面上的响应,以处理来自原始页面的ajax响应。这可能吗 ?如果没有建议的解决方案?

我正在使用spring框架。

谢谢。

+0

你可以在后端使用一些队列处理,而不需要ajax请求。你在用什么语言? – Newben

+0

@新我同意你可以使用基于队列的方法,但是如果你想接收数据而不必手动刷新页面,我没有看到Ajax的替代方案 – TGH

+0

@TGH是的,这是不方便的 – Newben

回答

3
+0

的目标是在与发送请求的页面不同的页面中接收异步响应。 –

+0

你需要做两件事情的组合:1)维护服务器某处的长时间运行任务的状态(无论是在用户的会话中,还是理想的其他分布式持久性,以便应用程序可以扩展到一台机器之外),以及2 )在用户访问的每个页面上利用长轮询/ websockets/async /等来在作业完成时推送更新。 – redmallard

+0

这听起来更接近解决方案。如果我们逐步完成以下步骤:客户端浏览器将作业提交给服务器,服务器将作业状态存储在分布式数据库或缓存中,那么客户端会从每个访问过的页面发送一个ajax请求以请求长时间运行的作业的响应?所以最初的请求不需要是ajax请求,但可能是一个简单的帖子,并且后续的请求会是ajax? –

1

我会研究一个推送框架,可以将更改从服务器推送到客户端。 如果您使用的是asp.net,需要考虑的是SignalR。

http://signalr.net/

也有其他long polling技术,您可以使用此。

这里 What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

+0

我正在使用spring框架。 –

+0

可否请您详细说明如何使用其他长轮询技术在不同的页面中获取响应?谢谢。 –

+0

在SO答案中很难完全解释这个概念,但总体思路是保持客户端和服务器之间的持久连接,以便将更改从服务器推送到客户端。我会做一些关于长轮询和推送框架的研究。 – TGH

0

这样做的simples方式是提交ajax请求,然后发送后续ajax请求以间隔(例如每隔2秒)对其进行轮询。

更好的方法是使用websockets - 最值得注意的是,如果您使用nodejs,请看http://socket.io。使用套接字你有持久的连接,你可以给每个用户分配一个ID。这样你可以将你的工作排列在服务器上,当他们准备好时,你可以查找相应的套接字并将答案发回。此外,有了这个,你也可以取消作业,你看到用户已经完全断开连接,所以你不会浪费服务器资源。

相关问题