2010-04-11 90 views
1

這是第三方的webservice。可用的公共webmethods之一是GetDocument()方法。該方法返回一個Document對象。 Document對象具有File(byte []),ContentType(string)等屬性。使用ajax和webservice下載文件

我的問題:我可以使用javascript(mootools)+ ajax + JSON訂閱此服務,返回文檔對象,本例中爲excel文檔,並強制文件下載?

回答

2

確實,您通常無法從JavaScript啓動下載,但有一個閃存組件Downloadify支持客戶端文件生成。

所以你可以服務文件從HTML/JavaScript下載。

解決了這個問題後,您仍然遇到了如何從源Web服務獲取想要提供的數據的問題。

第三方暗示XSS(跨站點腳本),這是使用XmlHttpRequest(Ajax)的否定。

這個問題的一個可能的解決方案可能是使用常見的隱藏IFrame技術來獲取數據。

只需要一個適當的(隱藏的?)表單,它可以正確發佈到Web服務並將其指向action到一個隱藏的IFrame元素,您在其中捕獲Load事件並解析返回的數據。

但是目前的瀏覽器具有不同級別的安全措施,這限制了您使用外部源訪問IFrame的能力,因此您實際上被困在這裏。抱歉讓你的希望升起。

完成您想要做的唯一實用穩健的方法是擁有一個本地服務器端腳本,它可以充當您的HTML/JavaScript和外部Web服務之間的代理。

使用這樣一個代理,您可以簡單地回到使用Ajax來獲取您的數據與Downloadify服務。

但是後來,由於您正在使用服務器腳本來獲取數據,爲什麼不直接提供腳本中的數據進行下載?

這些只是我對您提出的問題域的看法。