AJAX - 在用户更改页面后接收响应

时间:2012-10-06 01:59:13

标签: javascript jquery ajax

我所知道的:
当我对我的服务器进行ajax调用时,会创建一个处理程序,发送请求,我的php脚本接收请求并处理它 - 如果我告诉它 - 发回一个响应,我的javascript解析为要求。我也知道即使用户关闭浏览器或更改页面,php也会继续处理请求(这一切都在服务器端完成,所以为什么不呢?^。^)。

我需要知道的事情:
当用户更改我的网站中的页面时,ajax处理程序是否被杀死?例如:用户在mysite.com/foo.php上。他们单击一个向我的服务器发送ajax请求的链接。该请求的响应将显示在foo.php上的div#resp中。然后他们会在收到回复之前导航到mysite.com/bar.php。

如果我加载相同的javascript函数并在bar.php上有所需的div#resp元素,那么调用ajax的javascript函数仍然可以从服务器接收响应并将其传递给div上的div#resp ,从而显示出响应?或者原来的ajax手柄不再可用?如果 在标准的javascript中不再可用,那么jQuery中是否有一些植入可以让我检索响应并在bar.php上显示它?

9 个答案:

答案 0 :(得分:7)

根据您的描述,不 - 一旦您导航到另一个页面并导致页面重新加载,您的所有javascript处理程序都会被重新实例化并且原始的处理程序被破坏。

答案 1 :(得分:5)

答案是否定的。当您更改页面时,javascript进程将被终止并重新启动。页面重新加载之间没有任何内容。

虽然,如果您的页面也在ajax中更改,那么该进程不会被终止,您可以收到响应。 (顺便说一下,这可以在最近的浏览器中使用PushState对最终用户进行无缝连接)

答案 2 :(得分:2)

不,您不能保证在用户导航到下一页之前回复您的XHR(AJAX)响应。

如果您希望能够检测到服务器端,当用户离开您的页面时,您将不得不使用WebSocket或类似的技术。 WebSocket连接是与外部主机的长时间连接,您可以在切断时轻松检测到服务器端。 https://github.com/sockjs是WebSocket客户端+服务器的一个示例。

如果您只想在用户导航离开页面之前向用户显示内容,则需要查看window.onbeforeunload - onbeforeunload在用户离开页面之前触发,但不允许您执行任何异步AJAX要求。有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload

答案 3 :(得分:1)

如果您想这样做,请构建“单页网页应用”。简单明了,不要找到新的网址。

相反,使用pushstate / popstate更改浏览器中的地址,然后使用javascript / dynamic html重绘页面。

然后您可以处理所有ajax响应。

答案 4 :(得分:1)

另一种选择是使用onload事件向服务器发出ajax请求并询问是否需要执行某些操作。服务器需要跟踪“事物”并让浏览器知道发生了什么。

基本上,浏览器将在每个页面的开头轮询服务器。

我不认为代码示例是必要的或适用的,因为它会因每个应用程序而异。

答案 5 :(得分:0)

您可以在收到值时将值保存到localStorage,也可以在会话,内存缓存或redis中保存所有ajax数据响应。这意味着如果服务器收到请求,那么它会先将响应保存到某处,然后再返回。从列表中删除消息/响应取决于您的具体情况。某些系统允许您关闭其他人在用户第一次看到它们后消失的通知。消失的是不稳定的。用户可能会或可能不会真正看到它。

这听起来像来自各个图书馆的“flash信息”。您可能希望查看这些系统的实现。

答案 6 :(得分:0)

虽然原始接受的响应是正确的 - 一旦您导航到另一个页面,您就无法收到对ajax请求的响应 - 有一种解决方法:如果您将网站设为单页应用程序,您将能够获得响应。

答案 7 :(得分:0)

我的一个项目也有同样的情况。要在页面之间存在一些瞬态,您必须拥有从一个页面到另一个页面的内容。最简单的用法是PHP会话(我看到你使用PHP)。很简单,您可以在每个页面上加载异步请求(Ajax),如果有活动已启动,将在服务器上检查(使用PHPSESSID)。您可以选择检查每个页面加载(在docready上)或间隔。

当然,如果用户关闭浏览器标签,您将丢失所有内容。

答案 8 :(得分:0)

当您离开页面时,如果通过简单的HTTP POST使用,所有AJAX呼叫将无法在页面上显示

HTTP请求的生命周期通常如下所示:

用户访问网站的网址。 这创建了一个请求,该请求通过HTTP(超文本传输​​协议)经由因特网(DNS,路由器和交换机的网络)路由到Web服务器。 Web服务器接收HTTP请求并使用请求的Web页面(或内容)响应用户。 每次单击链接并访问网页时,您都会在幕后发出请求,然后从Web服务器接收响应。请注意,HTTP请求可以通过许多渠道进行,而不仅仅是Web浏览器。例如,可以使用TELNET或使用JAVA或C#等编写的客户端发出HTTP请求。

所以你必须为此使用套接字,以便可以调整http的生命周期。

http://devhub.fm/http-requestresponse-basics/