使用jquery下载AJAX PDF

时间:2011-09-08 14:36:21

标签: javascript jquery ajax download binary-data

这就是我想要做的事情:

我想向服务器发送HTTP请求,可能会返回PDF文件。但服务器也可能只返回错误代码(PDF文件不可用,PDF文件无效,PDF系统关闭等)。当我获得PDF时,我想打开PDF并刷新加载PDF的页面,因为PDF随后被标记为“已读”。当我收到错误代码(或超时)时,我想将页面重定向到错误屏幕。下载Google Chrome的工作方式与此类似:

http://www.google.com/chrome/eula.html?hl=en&platform=win

这是我不想做的事情:

出于性能原因,我不想按照此问题中的建议发出两个请求:

Download and open pdf file using Ajax

两个请求可能意味着:

  1. 请求PDF并返回代码以指示PDF是否可用。如果不可用,请立即显示错误页面
  2. 如果可用,请打开一个窗口并在该窗口中再次请求PDF,然后显示它。
  3. 这很昂贵,因为PDF必须通过远程系统访问。我不想两次访问PDF资源。另一个涉及两个请求的解决方案:

    1. 请求PDF并检索错误代码或缓存PDF的临时URL。出错时,立即显示错误页面
    2. 如果PDF可用,请打开一个窗口,其中显示缓存的PDF。
    3. 这需要为PDF的

      提供相当大的缓存

      这可能是一个有趣的领导:

      我在这里找到了这个问题,给了我一些关于如何下载二进制数据并将其作为二进制数据在JavaScript中使用的信息:

      Is there a way to read binary data in JavaScript?

      也许这是一个很好的领导,但当然它还不能解决我的问题,因为我想使用浏览器的默认编辑器来打开文件,就像我从普通URL请求文件一样。

      所以问题是:

      我可以下载二进制数据并像JavaScript中的常规文档一样打开它们吗?如果没有,我会将文档缓存在Weblogic中的某个托管内存容器中,并希望这不会杀死我们的系统。请回复:

      • 如果您确定无法完成(某些链接解释为什么会很好)
      • 如果您知道如何操作
      • 如果你有一个不同的解决方案大致按照我想做的事情(不发出两个请求)

1 个答案:

答案 0 :(得分:3)

实施的“老派”解决方案的工作原理如下:

  1. JavaScript客户端向服务器发送AJAX请求以“准备”PDF文档
  2. 服务器响应以下三条消息中的任何一条:
  3. 然后JavaScript客户端会这样做:
    • a)在新窗口中打开返回的URL,5秒后刷新当前窗口
    • b)当前窗口被重定向到错误屏幕
    • c)当前窗口保持不变,并且实施AJAX轮询以重复步骤2