在同步AJAX调用期间更新GUI

时间:2012-01-02 12:29:03

标签: javascript ajax jquery-ui google-app-engine jquery

我正在使用Google Appengine来运行webapp,但我遇到了一些问题。我需要生成一个非常大的CSV文件并将其发送到客户端。由于最大超时时间为60秒,并且没有要写入的文件系统,我决定使用SJAX(我猜的是同步AJAX)从服务器获取数据块,对它们进行补充,然后将其发送回服务器服务器将其作为CSV文件发送回客户端。很烦人。

无论如何,这需要很长时间,所以我想我会使用一个进度条来检查收到了多少块总数。问题是,因为我正在使用SJAX,所以孤独的js线程被阻塞了。 setTimeout()也被屏蔽了。任何人都知道如何绕过这个(GUI部分,我试图找到一个更好的方法来单独处理文件下载)?

编辑:虽然我很欣赏Shay指出我正确的方向来解决我的问题,但我仍然很好奇是否有办法在SJAX调用期间模拟多线程。

1 个答案:

答案 0 :(得分:3)

我将回答有关CSV生成的部分,因为它是您麻烦的根本原因。

您可以使用任务队列生成数据并将其保存到blobstore或Google Cloud Storage。任务队列有10分钟的处理超时,希望有足够的时间来生成数据。

你的模式应该是:调用一个方法来开始生成数据,使用pull来检查数据是否准备就绪(或使用comet的通道)并在准备就绪时下载它。