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

使用Javascript加载非HTML内容。可能吗?,javascript,html,http,Javascript,Html,Http,以下是场景: 我想使用Javascript进行一些HTTP API调用,并在浏览器中加载响应。请求可能是GET、POST、PUT或DELETE,返回的响应可能是任何类型的内容—可能是HTML、JSON、XML或图像、文档、二进制内容或其他内容。我希望浏览器能够以与加载新页面时完全相同的方式处理响应 问题是我看不到任何方法来加载我收到的任意内容 显然,可以将内容加载到DOM中,但这只允许我处理HTML。(并可能嵌入一些媒体类型,如图像等)我看不到任何明显的方法来处理嵌入响应类型,如JSON和XML

以下是场景:

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

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

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

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

有没有可能做到我想要的,或者你能建议一些优雅的解决办法,可能会有所帮助

编辑:

更多的背景资料-这是一些工作。我可以用
GET
POST
做我需要做的事情,这是因为
PUT
DELETE
不方便,因为我不能用HTML直接支持它们。目前,该实现使用了一些服务器端技巧和表单上隐藏的
\u方法
字段,允许将
POST
请求重载到
PUT
/
DELETE
/
选项
/无论什么,但理想情况下我希望将该逻辑从服务器端删除,并使用javascript执行等效操作


现在我不认为它真的是可以做到的,但我希望有人能证明我错了,或者找到一个优雅的解决办法。

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

但如果真的是你;你要做的事情很简单

  • 使用javascript进行HTTP API调用
  • 在GET/POST上加载包含原始数据的XML或JSON响应(除了解析它们并附加到DOM之外)
  • 那么..我不认为解决方案应该是比重定向更有趣的:

    <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>
    
    
    var url=//在此处插入您的url
    var a=document.getElementsByTagName[](0);
    a、 addEventListener(“单击”,callAPI,false);
    函数callAPI(){
    location.href=url;
    } 
    
    单击该链接,然后重定向到包含XML/JSON的url。这将向您显示响应,该响应显示嵌入到浏览器上显示的HTML中的原始数据

    让我知道你是不是在问这个?希望对您有所帮助。如果您想在javascript上了解更多关于HTTP restful的信息,您可以尝试。

    我想知道您是否可以或创建传递到窗口或iframe的URL不是web上资源的绝对URL,而是。您需要嗅出响应的mime类型,然后对响应体进行编码

    不知道它是否有效,但我很想知道你是否成功实现了它


    其他需要探索的东西:(HTML5特性)并创建一个带有自定义mime类型的“无源”iframe(其中
    src
    只是
    about:blank
    ),然后使用
    文档.

    我认为数据URI可以工作,但最终我觉得您将删除一点服务器端解析(您的POST参数),而代价是在其他地方引入复杂性

    如果您不关心使用中间GET请求来实际加载响应这一事实,那么可以使用AJAX和重定向组合,但是猜测您可能这样做是不可行的

    由于您不想使用AJAX并将其插入到DOM中,我实际上认为您的表单字段在这一点上是最优雅的,或者至少是最健壮的解决方案。不要在iFrame、新窗口或类似应用程序上乱搞,一个请求产生一个响应,代价是可能需要将帖子重新解释为其他服务器端内容


    我想不出比您目前拥有的解决方案更好的解决方案了。

    备选方案之一是提供资源(文件)作为链接,然后单击客户端下载文件。客户端上的任何支持软件/应用程序都可以运行/打开该文件。此解决方案在浏览器之外。这不起作用,因为它只允许我执行
    GET
    请求。
    我希望浏览器以与加载新页面时完全相同的方式处理响应。
    然后加载新页面。您的浏览器已经具有此功能。这意味着它将发出
    GET
    请求(或
    POST
    ,对于已发布的表单),这不足以满足我的需要。我还希望能够加载一个新页面,以响应
    PUT
    DELETE
    请求。我想你已经掌握了我所要求的Git。问题是,虽然我可以轻松触发任何类型的AJAX调用,但使用
    location.href=url
    加载响应只会在加载响应时发出
    GET
    请求。换句话说,链接的文章展示了如何触发AJAX请求以响应链接或表单提交,但是