【问题标题】:HTTP POST call embedded in a static html page嵌入在静态 html 页面中的 HTTP POST 调用
【发布时间】:2012-08-19 12:01:12
【问题描述】:

我想在 html 页面中嵌入一个返回 png 图像的 HTTP 调用。

如果有什么不同,我将在 github 的 gh-pages 上运行该页面。

网址是:http://public.opencpu.org/R/user/SChamberlain/ropensci_dash/apistatus10/png

请注意,有时 url 不会返回 png,因为服务有时会关闭。

我想使用 POST 方法调用该 url,然后简单地将 png 返回到页面中。理想情况下,http 调用也将在页面回收时运行。

我是否使用 iframe、表单、javascript?

谢谢!斯科特

【问题讨论】:

  • 这样做的想法是什么?为什么不能只嵌入图像? <img src="[the url]" />?
  • 该 URL 正在调用服务器,该服务器运行一些 R 代码,该代码会输出一个 png,因此它不是指向图像的链接,而是一个运行的函数,它会导致图片。
  • 好吧,如果调用生成了一个图像并且你把它放在一个图像标签中,客户端会得到一个图像并且它会立即显示出来。
  • 好点。似乎工作。我只是认为它必须比这更复杂。
  • 好吧,如果(如您所说)有时它可能会关闭,那么如果您在检查之前将其嵌入,最终可能会得到损坏的图像。这是我制作的一个 vanilla-js 小提琴,只有在成功加载时才会将图像附加到屏幕上 jsfiddle.net/BwJeC

标签: html


【解决方案1】:

[我还是好好回答吧]

当服务器向您提供图像数据并且您想要加载它时,您不妨将其视为图像并使用img 标签。在您的特定情况下,这种方法的问题是您说服务器有时可能会关闭,这意味着如果您只是附加图像而不首先检查损坏的链接,您将获得丑陋的损坏图像空间。

但是,使用图像的简单性仍然是可行的。通过使用带有加载事件处理程序的小 javascript,您可以附加图像当且仅当它成功加载。如果您从请求中获得任何类型的错误代码,则加载事件将永远不会触发,并且您不会附加损坏的图像。

这是 vanilla-js 中的概念:

img = document.createElement("img");
img.onload = function(e){document.getElementsByTagName("body")[0].appendChild(img);};
img.src = "http://public.opencpu.org/R/user/SChamberlain/ropensci_dash/apistatus10/png";

你也可以在这里看到它的实际效果:http://jsfiddle.net/BwJeC/

【讨论】:

  • 回答已接受...顺便问一下,您的 js fiddle 站点是否准备 .js 文件供您在本地运行?
  • @ScottChamberlain 不,它只是一个测试平台,可以轻松共享 html/css/js 示例(并且它有几个 js 库可以轻松加载)。除非您知道如何将浏览器设置为允许,否则在本地运行 AJAX 可能会非常痛苦。值得庆幸的是,加载图像不被视为此类问题;)
【解决方案2】:

您可以使用 XHR 从外部动态页面加载二进制数据并设置图像的内容。

This question, is very much similar Or this

【讨论】:

    【解决方案3】:

    我真的不明白你为什么要发帖。

    无论如何,如果您想使用 POST 数据查询图片,可能需要执行 Js XHR 调用并将图像作为 base64 返回,然后执行以下操作:

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" />
    

    最好仍然是一个简单的 get 调用:

    <img src="/dynamicallyGeneratedPicture" />
    

    使用返回图像类型文档的路由或脚本。

    【讨论】:

    • 这应该为您提供解决方案的另一半,它本质上是通过 HttpRequest 获取二进制数据,然后将其转换为 Base64 字符串:emilsblog.lerch.org/2009/07/…
    • 感谢您的帮助,正在研究这些不同的解决方案
    猜你喜欢
    • 2013-12-16
    • 2020-11-25
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2018-11-14
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多