我正在尝试制作一个小脚本来在 imgur 上重新托管网络上的图片。
这称为图像侧载,您只需将浏览器指向 http://api.imgur.com/2/upload?url= + 图片网址
它不会返回任何 XML 或 JSON 响应,因此我无法解析它以获取 img URL。
但我想我找到了一种方法来做到这一点,但无法让它正常工作。这是我正在使用的代码。
$(document).ready(function() {
$("#button").click(function() {
str = $("input").val().toString();
link = "http://api.imgur.com/2/upload?url=" + str;
var xhr = new XMLHttpRequest();
xhr.open("GET", link);
xhr.send();
var headers = xhr.getAllResponseHeaders().toLowerCase;
alert(headers);
});
});
查看 Google Chrome 的控制台,这些是脚本运行后生成的结果。
我还不允许发布图像,所以这里是结果的链接:/image/zAKC2.png
我需要以某种方式访问第四个响应 header ,因为即使此方法不返回任何可解析的 XML 或 JSON 响应,该链接也是上传的 img 的 URL,这就是我所需要的。
那么有没有办法访问该信息?为什么取消了?
谢谢大家!
最佳答案
好吧,API 必须返回一些东西,否则就没用了。
实际上,http://api.imgur.com/examples建议您这样做:
var xhr = new XMLHttpRequest();
xhr.open("GET", link);
xhr.onload = function() {
var url = JSON.parse(xhr.responseText).upload.links.imgur_page;
alert(url);
}
xhr.send();
编辑。好的,我明白了。通常,上面的代码应该可以工作,但我认为 imgur 遇到了问题。我会报告该错误。
虽然错误仍然存在,但这里有一个肮脏的解决方案来满足您的需求:
var xhr = new XMLHttpRequest();
xhr.open("GET", link);
xhr.onload = function() {
html = xhr.responseText;
alert(html.substr(html.indexOf('http://i.imgur.com/') + 19, 5));
}
xhr.send();
您的代码无法运行,因为您没有等待答案。您必须通过回调函数捕获它。
编辑。以上代码仅在本地有效。当您使用 jQuery 时,让我介绍一下快捷方式 $.post
:
$(document).ready(function() {
$("#button").click(function() {
$.post('http://api.imgur.com/2/upload.json', {
key: 'ec575de603b936e54c2b4a9f232d537e',
image: $("input").val().toString()
}, function(data) {
alert(data.upload.image.hash);
});
});
});
关于javascript - XMLHttpRequest HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892682/