以下是该方案:
我想使用Javascript进行一些HTTP API调用,并在浏览器中加载响应。请求可能是GET
,POST
,PUT
或DELETE
,并且返回的响应可以是任何类型的内容 - 可能是HTML,JSON,XML,或图像,文档,二进制内容或其他。我希望浏览器以与浏览器加载新页面时完全相同的方式处理响应。
问题在于我看不到任何方法来加载我收到的任意内容。
显然,可以将内容加载到DOM中,但这只能让我处理HTML。 (并且可能嵌入一些媒体类型,如图像等)。我没有看到任何明显的方法来处理嵌入响应类型(如JSON和XML),而不必构建有关如何将每种类型呈现为HTML的特殊情况。
我已经考虑过是否可能有涉及框架或更改window.location
以加载内容的工作,但我看不到任何方法可以使其工作。
是否有可能做我正在寻找的事情,或者你能建议任何可能有帮助的优雅解决方案吗?
修改
了解更多背景信息 - 这是针对an API browser的一些工作。我使用GET
和POST
做我需要的东西没问题 - 它是PUT
和DELETE
这些很尴尬,因为我不能直接用HTML支持它们。目前,该实现在表单上使用了一些服务器端欺骗和隐藏的_method
字段,这允许POST
请求被重载到PUT
/ DELETE
/ {{ 1}} /无论如何,但理想情况下我想从服务器端获取该逻辑,并使用javascript执行等效操作。
现在我认为它实际上并不存在,但我希望有人可以证明我错了,或者找到一个优雅的解决方案。
答案 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还是其他任何东西......)。
但实际上,如果您正在尝试做的事情就像
一样简单然后..我认为解决方案不应该只是真正的重定向:
<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。