我有一个从控制器检索base64编码图像的功能,并在新窗口中显示图像。它在Chrome中完美运行,但在Firefox中失败,错误“格式不正确”和“请求方法”GET“不受支持”。我不明白为什么会出现这种情况,因为我使用的是帖子,而不是......
相关的代码部分是:
function showPicture(label) {
$.post( 'picture-view', { labelname: label }, function(ImageSrc) {
var img = new Image;
img.src = "data:image/png;base64," + ImageSrc;
img.style.position = 'fixed';
img.style.left = '0';
img.style.top = '0';
img.onload = function() {
var newWindow = window.open("", label,"scrollbars=0, toolbar=0, width="+myImage.width+", height="+myImage.height);
creativeWindow.document.documentElement.innerHTML='';
creativeWindow.document.documentElement.appendChild(img);
}
});}
编辑此外,我们将非常感谢您对可访问的图书或网站的任何建议,以了解有关此资料的更多信息。
编辑#2 我还应该补充一点,当我尝试将img.src写入控制台时,它出现为[objectXMLDocument]。
编辑#3 我已经跟踪了错误,因为返回的ImageSrc应该是String,但是被解释为XML对象。它包含反斜杠这一事实导致“格式不正确”的错误。我现在的问题是:如何让$ .post或$ .ajax在Firefox中返回一个String(他们已经在Chrome中这样做了)。
答案 0 :(得分:0)
我可能会尝试使用.ajax
代替。它也允许你提供后备内容。
为什么不在服务器上托管图像并通过src加载图像,而不是使用post发送图像。这将是一个更清洁的方法。
例如
$.ajax({
type: "POST",
data: "",
url: yourURL,
error: function() {
//The call was unsuccessful
//Place fallback content/message here
},
success: function(data) {
//The call was successful
//Open new window
var newWindow = window.open("", label,"scrollbars=0, toolbar=0, width="+myImage.width+", height="+myImage.height);
creativeWindow.document.documentElement.innerHTML='';
//Create the image
var image = document.createElement("img");
image.src = data;
//Attach image to new window
creativeWindow.document.documentElement.appendChild(image);
}
});
答案 1 :(得分:0)
为了不留下未回答的问题...
我最终使用灯箱来显示图像而不是生成新窗口。