使用Javascript加载非HTML内容。可能吗?

时间:2011-12-13 11:29:57

标签: javascript html http

以下是该方案:

我想使用Javascript进行一些HTTP API调用,并在浏览器中加载响应。请求可能是GETPOSTPUTDELETE,并且返回的响应可以是任何类型的内容 - 可能是HTML,JSON,XML,或图像,文档,二进制内容或其他。我希望浏览器以与浏览器加载新页面时完全相同的方式处理响应。

问题在于我看不到任何方法来加载我收到的任意内容。

显然,可以将内容加载到DOM中,但这只能让我处理HTML。 (并且可能嵌入一些媒体类型,如图像等)。我没有看到任何明显的方法来处理嵌入响应类型(如JSON和XML),而不必构建有关如何将每种类型呈现为HTML的特殊情况。

我已经考虑过是否可能有涉及框架或更改window.location以加载内容的工作,但我看不到任何方法可以使其工作。

是否有可能做我正在寻找的事情,或者你能建议任何可能有帮助的优雅解决方案吗?

修改

了解更多背景信息 - 这是针对an API browser的一些工作。我使用GETPOST做我需要的东西没问题 - 它是PUTDELETE这些很尴尬,因为我不能直接用HTML支持它们。目前,该实现在表单上使用了一些服务器端欺骗和隐藏的_method字段,这允许POST请求被重载到PUT / DELETE / {{ 1}} /无论如何,但理想情况下我想从服务器端获取该逻辑,并使用javascript执行等效操作。

现在我认为它实际上并不存在,但我希望有人可以证明我错了,或者找到一个优雅的解决方案。

3 个答案:

答案 0 :(得分:1)

我想知道您是否可以open a new window或创建an iframe,其中您传递给窗口或iframe的网址不是网络资源的绝对网址,而是a data uri。您需要嗅出响应的mime类型,然后对响应的主体进行编码。

不知道它是否有效,但我很想知道你是否设法实现它。

要探索的其他内容:the BlobBuilder(HTML5功能)并使用自定义mime类型创建“无源”iframe(其中src只是about:blank),然后使用{ {1}}写入iframe文档(AppleOfMyIframe中的某些代码可能有用)。

答案 1 :(得分:1)

我认为数据URI可以工作,但最终我觉得你要删除少量的服务器端解析(你的POST参数),代价是在别处引入复杂性。

如果你不关心你正在使用中间GET请求来实际加载响应这一事实,你可以使用AJAX和重定向组合,但猜测你可能会这样做“'不可行。

由于您不想使用AJAX并插入DOM,我实际上认为此时您的表单字段是最优雅的,或者至少是最强大的解决方案。不要乱用iframe,新窗口或类似的和一个请求产生一个响应,代价是不得不将POST重新解释为服务器端的其他东西。

我无法想到比现有解决方案更好的解决方案。

答案 2 :(得分:0)

正如您可能了解自己,表单只允许POST和GET HTTP请求。使用javascript进行PUT和DELETE的唯一方法是通过AJAX(XMLHttpRequest);这是你不想要的,因为你特别要求你的代码在每个HTTP API调用上刷新页面,然后在浏览器上显示原始响应(无论是XML还是JSON还是其他任何东西......)。

但实际上,如果您正在尝试做的事情就像

一样简单
  1. 使用javascript进行HTTP API调用。
  2. 在GET / POST上加载包含原始数据的XML或JSON响应(除了解析它们并附加到DOM)
  3. 然后..我认为解决方案不应该只是真正的重定向:

    <html>
    <head>
       <script type="text/javascript">
           var url = //insert your url here
           var a = document.getElementsByTagName[](0);
           a.addEventListener("click", callAPI, false);
    
           function callAPI(){
               location.href=url;
           } 
       </script>
    </head>
    <body>
       <a href="#request">Click here to make HTTP call</a>
    </body>
    </html>
    

    您单击该链接,然后重定向到包含XML / JSON的URL。这将显示响应,显示嵌入到浏览器上显示的HTML的原始数据..

    请告诉我这是你问的问题?希望有所帮助。如果您想了解更多有关HTTP for restful on javascript的信息,可以试试reading this article here