发送一个 AJAX 请求以处理数据并返回多个 PHP 响应以更新其进度

Posted

技术标签:

【中文标题】发送一个 AJAX 请求以处理数据并返回多个 PHP 响应以更新其进度【英文标题】:Send One AJAX Request to process data and Get Back Multiple PHP Responses updating its progress 【发布时间】:2011-08-24 19:15:08 【问题描述】:

背景:

我正在尝试开发一个可以集成到我们的移动富媒体广告中的加载屏幕插件。其中一些广告使用几张图片来制作翻书式动画,所以这样的东西真的很有用。它需要在 iPhone 4.0+ 和 android 2.2+ 上运行,最好是在 Windows Phone 7.1 上运行。

我过去编写加载屏幕的方式是创建一系列图像对象并将其源设置为图像 url。然后对于该对象的每个 onload、onerror 或 onabort 事件,我会将加载过程增加 1 并将其显示在加载屏幕叠加层上。

但是,根据团队成员的建议,我一直在研究使用数据 URI 将图像数据直接编码到网页上,使用 php。这种方法的唯一缺点是如果有很多图像,它会导致网页打开缓慢。

几天前,我发现了a blog post by Mark Kolich,他在其中使用data uri 在服务器端脚本中编码了一系列图像,将其包装在json 响应中,然后将所有这些图像文件发送回他的Web 应用程序。这是一个好主意,但是,如果我在加载屏幕中使用该概念,那么加载进度将在一个 ajax 请求中从 0% 变为 100%。因此,如果加载过程需要几秒钟,这可能不足以保持访问者的兴趣。我需要在中间展示一些进展。

待办事项:

因此,我需要做的是采用 Mark 的方法并弄清楚如何使响应更加实时。我想这样做,这样我就可以向我的加载器 php 脚本发送一个带有图像列表的 AJAX 请求,并让我的 php 脚本每次(或每隔一次,或每 5 次等)更新多个响应并返回成功完成了这些图像的读取和编码。

我意识到我可能过于复杂了; php 脚本将如此快速地处理这些图像,以至于返回客户端代码的喋喋不休将毫无意义,因为它会立即完成。在这种情况下,使用 setTimeouts 模拟与这些图像相关的加载过程可能更有意义,直到 JSON 响应返回。或者我可能走在正确的轨道上并且有一定的阈值我应该开始考虑这种方法,因为加载时间太长了。

有什么想法吗?有什么例子吗?

【问题讨论】:

【参考方案1】:

正如@Marc B 所说,Comet 或 WebSockets 解决方案(带有旧版 Web 浏览器的后备)绝对是您正在寻找的解决方案。

Comet 可能有点棘手,最终 HTTP 流和 HTTP 长轮询解决方案是 HTTP 的解决方案。 WebSockets 是一种更好的方法,因为它们是标准化的,并且在我看来,正在成为服务器和客户端双向实时通信的标准。 PHP 的实时基础架构有几种解决方案:

Using Comet with PHP *** question Comet and PHP tutorial PHP and WebSockets 和一个使用它的tutorial

如果您更愿意使用托管服务来消除安装和维护实时基础架构的痛苦,特别是如果您只想在事件发生时将更新从服务器推送到客户端(ios、Android、WP7 上的浏览​​器) (当应该显示新图像或更新数据库等时)托管解决方案绝对是一个不错的选择(注意:我为托管解决方案提供商工作)。

我在这里编制了托管解决方案列表:

见:Hosted realtime technologies

【讨论】:

【参考方案2】:

试试Comet。它允许多部分响应,这可以让您获得这些定期更新,但仍然只有一个 HTTP 请求进行。

【讨论】:

是的,我早就想到了。但老实说,我很难理解 Comet 的实现。您是否有任何指向教程和示例的链接可以提供帮助?

以上是关于发送一个 AJAX 请求以处理数据并返回多个 PHP 响应以更新其进度的主要内容,如果未能解决你的问题,请参考以下文章

Ajax

防止重复发送Ajax请求的解决方案

$.ajax Post 请求不发送 POST 数据

jQuery AJAX GET/POST 请求在错误处理程序中返回 404,但从服务器发送了有效响应

现需要使用 jQuery 代码实现 ajax 请求,详细信息如下

jQuery框架中$.ajax()的常用参数有哪些?写一个post请求并带有发送数据和返回数据的样例